可能的重复:
C# - 是否有比“打开类型”更好的替代方案?
你好,假设我在类类型上有一个很大的 if/else。有没有办法用开关盒来做到这一点?
例子 :
function test(object obj)
{
if(obj is WebControl)
{
}else if(obj is TextBox)
{
}
else if(obj is ComboBox)
{
}
etc ...
我想创建类似的东西
switch(obj)
{
case is TextBox:
break;
case is ComboBox:
break;
}
}
更新C#7
Yes: Source
switch(shape)
{
case Circle c:
WriteLine($"circle with radius {c.Radius}");
break;
case Rectangle s when (s.Length == s.Height):
WriteLine($"{s.Length} x {s.Height} square");
break;
case Rectangle r:
WriteLine($"{r.Length} x {r.Height} rectangle");
break;
default:
WriteLine("<unknown shape>");
break;
case null:
throw new ArgumentNullException(nameof(shape));
}
C# 7 之前的版本
No.
http://blogs.msdn.com/b/peterhal/archive/2005/07/05/435760.aspx
今天我们收到了很多关于添加 C# 语言的请求
我将讨论其中一种更常见的问题 - 切换类型。
切换类型看起来是一个非常有用且简单的功能:
添加一个类似开关的结构,用于切换类型
表达式,而不是值。这可能看起来像
这:
switch typeof(e) {
case int: ... break;
case string: ... break;
case double: ... break;
default: ... break;
}
这种语句对于添加虚拟非常有用
方法,例如通过不相交的类型层次结构或类型进行调度
包含您不拥有的类型的层次结构。看到一个像这样的例子
这样,您可以很容易地得出结论,该功能将是
简单且有用。它甚至可能会让你思考“为什么不
那些 #*&%$ 懒惰的 C# 语言设计者只是让我的生活更轻松
添加这个简单、省时的语言功能?”
不幸的是,像许多“简单”语言功能一样,类型切换是
并不像乍看起来那么简单。当你看到时,麻烦就开始了
一个更重要但同样重要的例子如下:
class C {}
interface I {}
class D : C, I {}
switch typeof(e) {
case C: … break;
case I: … break;
default: … break;
}
Link: https://blogs.msdn.microsoft.com/peterhal/2005/07/05/many-questions-switch-on-type/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)