dex*_*ter 8 c# compiler-construction types keyword
有时候检查对象是否不是X的类型是有道理的,所以你需要这样做:
if(this.GetType() != typeof(X))
{
//Do my thing.
}
Run Code Online (Sandbox Code Playgroud)
这对我来说有点麻烦,不会有这样的东西更好:
if(this is not X)
{
//Do my thing
}
Run Code Online (Sandbox Code Playgroud)
Bol*_*ock 21
逻辑NOT运算符怎么样!,符合'not'这个词的描述就好了:
if (!(this is X))
{
//Do my thing
}
Run Code Online (Sandbox Code Playgroud)
正如其他人已经指出的那样,is也用于检查对象的类是从某个类继承还是实现某个接口,这与它有很大不同GetType().
无论CodeInChaos和StriplingWarrior有为什么没有一个合理的解释not在C#中的关键字.
Str*_*ior 10
在语言中添加关键字会增加复杂性.在初始规范之后向一种语言添加关键字可能会导致人员升级的重大变化.因此,如果关键字非常强大,通常只会添加关键字.在这种情况下,正如其他答案所指出的那样,使用bang运算符非常容易:
if (!(pero is Human)) ...
Run Code Online (Sandbox Code Playgroud)
...一个典型的C#(/ C/C++/Java)开发人员会读"如果没有(pero is human)".因此,特殊关键字没有多少理由.
注意,this.GetType()!= typeof(X),如果这是源自(或在一个接口类型的情况下工具),但不完全相同的X返回false,而this is X返回true.
为什么在你可以使用时会有一个单独的关键字!(a is X)?这种语言膨胀,收益甚微.正如Eric Lippert所强调的那样,每个新语言功能都需要提供足够的优势来补偿编码,记录,测试以及语言的复杂性.而且not is运营商提供的不够.
你可以实现一个扩展方法,但我认为这是愚蠢的:
public static bool IsNot<T>(this object obj)
{
return !(obj is T);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |