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,所以不能继续执行下一个
案例。例如,有关讨论,请参阅。