2015-04-01 60 views
2

我有我的代碼如下代碼,但它總是說,返回語句丟失,即使我已將它們放在切換列表中。工廠模式中缺少return語句c#

public IMap Map(string oldtheme) 
{ 
    switch (oldtheme) 
    { 
     case "archer": return new Archer(); 
     case "craftyblue": return new CraftyBlue(); 
     case "minimal": return new Minimal(); 
     case "mintalicious": return new Mintalicious(); 
     case "misfit": return new Misfit(); 
     case "peach": return new Peach(); 
     case "queen": return new Queen(); 
     case "sketch": return new Sketch(); 
     case "takeaway": return new TakeAwayLemonFresh(); 
     case "lemonfresh": return new TakeAwayLemonFresh(); 
     case "vanilla": return new Vanilla(); 
     case "velvet": return new Velvet(); 
     case "victoriana": return new Victoriana(); 
     case "writer": return new Writer(); 
    } 
} 

回答

4

你需要處理的情況下,當oldtheme是你檢查的值沒有。

根據你的情況,我建議投擲一個ArgumentException所以你知道當它發生。我添加了一個default情況下您switch聲明:

public IMap Map(string oldtheme) 
{ 
    switch (oldtheme) 
    { 
     case "archer": return new Archer(); 
     case "craftyblue": return new CraftyBlue(); 
     case "minimal": return new Minimal(); 
     case "mintalicious": return new Mintalicious(); 
     case "misfit": return new Misfit(); 
     case "peach": return new Peach(); 
     case "queen": return new Queen(); 
     case "sketch": return new Sketch(); 
     case "takeaway": return new TakeAwayLemonFresh(); 
     case "lemonfresh": return new TakeAwayLemonFresh(); 
     case "vanilla": return new Vanilla(); 
     case "velvet": return new Velvet(); 
     case "victoriana": return new Victoriana(); 
     case "writer": return new Writer(); 
     default: throw new ArgumentException("unexpected value of oldtheme"); 
    } 
} 
+0

我承認這實際上比僅僅返回'null'好,所以+1。 – 2015-04-01 11:11:01

0

你怎麼想返回字符串是否這些都不在你開關有?你的函數缺少這種情況下的返回語句。

1

您缺少默認值。只需添加;

default: return null; 

在你的switch的底部,你會沒事的。

0

你有充分的返回指令後使用休息,它會正常工作。

+0

嗨安德烈,那不是事實。只有當控制可以繼續到下一個'case'時,'break'關鍵字纔是必需的,而不能因爲執行是'return'ed。參見[switch語句返回適合於替換break](http://stackoverflow.com/q/3196163/1364007),例如討論。 – 2015-04-01 16:26:25