我有一个字段或可空类型,比如财产,成员访问空检查(C#)
MyType? ThisCantBeNull = Something();
(MyType
是一个结构在这里。)某处在我的代码,我保证这个东西不是null
,像这样:
if (ThisCantBeNull == null)
throw new Exception();//nothing special
然后,我要访问此MyType
实例的成员。我有3个选项,我的问题是,这是最好的解决方案。
空,合并运算
ThisCantBeNull?.SomeMember ?? someDefaultValue
或
(ThisCantBeNull ?? someDefaultValue).SomeMember
演员到非空的
((MyType)ThisCantBeNull).SomeMember
使用NUL的
Value
财产拉布勒类型ThisCantBeNull.Value.SomeMember
我不关心代码的可读性在这里,我不感兴趣的优点和来自这方面的上述技术缺陷。 我很感兴趣性能!
感谢您的任何想法和信息!
你不会得到比的性能微秒多出了不同的无效的检查方法。这是一种微观优化。 –
https://ericlippert.com/2012/12/17/performance-rant/ –
你没有考虑检查'HasValue'。顺便说一句,编译器不会优化这些吗? - 另请注意,Sematics不匹配。有一个默认值,并有一个异常是不一样的。 – Theraot