C# 工厂模式c中缺少return语句#
我的代码有以下代码,但它总是说返回语句丢失了,即使我把它们放在了开关列表中C# 工厂模式c中缺少return语句#,c#,switch-statement,C#,Switch Statement,我的代码有以下代码,但它总是说返回语句丢失了,即使我把它们放在了开关列表中 public IMap Map(string oldtheme) { switch (oldtheme) { case "archer": return new Archer(); case "craftyblue": return new CraftyBlue(); case "minimal": return new Minimal();
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: return null;
在
开关的底部
,您会没事的。您需要处理旧主题
不属于您检查的值的情况
根据您的情况,我建议您掷骰子,以便您知道它何时发生。我在您的开关
声明中添加了一个案例:
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");
}
}
每次返回命令后都必须使用break,它会正常工作。我承认这实际上比只返回
null
要好,所以+1。嗨,Andre,这不是真的。只有当控件可以继续执行下一个案例时,break
关键字才是必需的,因为执行是return
ed,所以不能继续执行下一个案例。例如,有关讨论,请参阅。