关于 c# 中的 Cases 和 switches 我们真的需要它们吗?
About Cases and switches in c# do we really need them?
我刚刚用许多案例和开关编写了一个程序。那么在 C# 中有什么方法可以避免 Cases 和 Switches 吗?在我看来,我最终得到了一个 "messy" 程序。所有其他高级全栈开发人员,他们都说这很好等等。
但基本上我只是想知道你对这个主题的想法?您知道在没有 Cases 和 Switch 的情况下进行智能编码的更好方法吗?
基本上,质疑事物、现状是我的天性....
每个特定案例都需要自己的个人决定。在某些情况下,数百行看似虚拟的代码比使用递归、引用第 3 方、LINQ 等的漂亮的几行复杂逻辑更好地实现了目标。
但是谈到替代方案我可以推荐字典:
var switchCaseAlternative = new Dictionary<string, Action>()
{
{"case1", () => {System.Diagnostic.Debug.WriteLine("One");}},
{"case2", () => {System.Diagnostic.Debug.WriteLine("Two");}}
};
那么使用说明将如下所示:
switchCaseAlternative["case1"]();
您可以尝试使用 类 的继承。 Switch 意味着你需要用不同的值做一些类似的事情。希望下面的例子可以帮助理解我的想法:
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";
}
我刚刚用许多案例和开关编写了一个程序。那么在 C# 中有什么方法可以避免 Cases 和 Switches 吗?在我看来,我最终得到了一个 "messy" 程序。所有其他高级全栈开发人员,他们都说这很好等等。
但基本上我只是想知道你对这个主题的想法?您知道在没有 Cases 和 Switch 的情况下进行智能编码的更好方法吗?
基本上,质疑事物、现状是我的天性....
每个特定案例都需要自己的个人决定。在某些情况下,数百行看似虚拟的代码比使用递归、引用第 3 方、LINQ 等的漂亮的几行复杂逻辑更好地实现了目标。
但是谈到替代方案我可以推荐字典:
var switchCaseAlternative = new Dictionary<string, Action>()
{
{"case1", () => {System.Diagnostic.Debug.WriteLine("One");}},
{"case2", () => {System.Diagnostic.Debug.WriteLine("Two");}}
};
那么使用说明将如下所示:
switchCaseAlternative["case1"]();
您可以尝试使用 类 的继承。 Switch 意味着你需要用不同的值做一些类似的事情。希望下面的例子可以帮助理解我的想法:
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";
}