【发布时间】:2020-07-12 10:10:46
【问题描述】:
object obj = "Hello";
// is keyword
if (obj is string str1)
{
Console.WriteLine(str1);
}
// as keyword
string str2 = obj as string;
if (str2 != null)
{
Console.WriteLine(str2);
}
在上面的代码中,局部变量是用'is'关键字声明的,但是用'as'关键字在性能上有什么区别吗?
我想知道在强制转换和空值检查方面是否存在性能差异。 (除了str1和str2变量的局部范围差异)
【问题讨论】:
-
很确定它们编译为相同的 IL。你可以尝试在sharplab.io上编译它。
-
感谢您的回答。这是一个不错的实用程序。比较 IL 时,结果完全一样。
-
旁注:尽管在这里无关紧要,但您应该更喜欢
is object而不是!= null- 区别在于!= null可以调用自定义相等/转换运算符, 可能比简单的空测试开销更大;is object语法从不调用运算符。
标签: c# performance keyword