工厂模式 c# 中缺少 return 语句

missing return statement in factory pattern c#

我的代码有以下代码,但它总是说缺少 return 语句,即使我已将它们放在开关列表中也是如此。

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();
    }
}

如果字符串是您交换机中的 none,您想要 return 什么?您的函数缺少针对该案例的 return 语句。

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

default: return null;

在你的 switch 底部,你会没事的。

您需要处理 oldtheme 是您检查的值的 none 的情况。

根据您的情况,我建议将 ArgumentException so you know when it happens. I have added a 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");
    }
}

您必须在每个 return 命令后使用 break,它会正常工作。