关于c#中的case和switch我们真的需要它们吗?

时间:2016-12-12 09:16:03

标签: c# switch-statement case-statement

我刚刚写了一个带有manny Cases和Switches的程序。那么在C#中是否有任何方法可以避免案例和交换机?我最终得到了一种混乱的#34;程序在我看来。所有其他高级全栈开发人员,他们说这是好的等等。

但基本上我只是对你在这个问题上的想法感到好奇吗?你知道在没有Case和Switch的情况下进行智能编码的更好方法吗?

基本上,我在质疑事物,现状......

2 个答案:

答案 0 :(得分:4)

每个特定案件都需要自己的个人决定。有些情况下,数百行虚拟外观代码实现目标要好得多于精美的几行复杂逻辑和递归,引用第三方,LINQ等等。

但是谈论替代方案我可以建议词典:

var switchCaseAlternative = new Dictionary<string, Action>() 
{
   {"case1", () => {System.Diagnostic.Debug.WriteLine("One");}},
   {"case2", () => {System.Diagnostic.Debug.WriteLine("Two");}}
};

然后使用说明如下:

  switchCaseAlternative["case1"]();

答案 1 :(得分:2)

您可以尝试使用类的继承。切换意味着您需要做与不同值相似的事情。希望,下面的例子有助于理解我的想法:

public enum SexTypes { Unknown, Male, Female }

public abstract class Human
{
    protected string HelloMessage = "common message part";
    public abstract SexTypes Sex { get; }

    public void SayHello() => Console.WriteLine(HelloMessage); //good way

    public void SayHelloWithSwitch() //bad way
    {
        switch(Sex)
        {
            case SexTypes.Unknown:
                Console.WriteLine(HelloMessage);
                break;
            case SexTypes.Male:
                Console.WriteLine(HelloMessage + " some modifications");
                break;
            case SexTypes.Female:
                Console.WriteLine("new other message");
                break;
            default:
                throw new ArgumentOutOfRangeException();
        }
    }
}

public class Boy : Human
{
    public override SexTypes Sex => SexTypes.Male;
    protected new string HelloMessage => base.HelloMessage += " , some message modifications";
}

public class Girl : Human
{
    public override SexTypes Sex => SexTypes.Female;
    protected new string HelloMessage = "overwrite all message";
}