我有一個字段或可空類型,比如財產,成員訪問空檢查(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