null coalescing operator将结果缓存在c#
我知道做(myValue ?? new SomeClass())类似于(myValue == null?new SomeClass():myValue)
但出于好奇,当我打电话给某个功能时,是否有任何性能优势 解决方法
那么,如果通过“缓存”表示将其存储在一个临时变量中,那么是的.
这个结构: var result = (getResult() ?? new SomeClass()); 可以认为是等同于: var <temp> = getResult(); if (<temp> == null) <temp> = new SomeClass(); result = <temp>; 这也告诉你第二部分,操作数后?如果第一个操作数不为空,则完全不执行. 所以回答你的具体问题: >每个操作数最多被评估一次 还请注意,您可以链接这些: var result = first() ?? second() ?? third() ?? fourth(); 其结果如下: >评估第一() 结果是返回的第一个(不是双关语)非空值. 这种类型的代码即将在新的C#中获得更好的新功能.操作符: var result = first?.second?.third; 这是基本的处理,即它会读取第一个第二个成员,然后是第二个成员的第三个成员,但是它将在第一个null处停止,并且还将确保仅对每个步骤进行一次评估: (obj as IDisposable)?.Dispose(); obj作为IDisposable只会评估一次. TryGetObjectToSave()?.Save(); 只会调用TryGetObjectToSave()一次,如果它返回某些东西,那么将调用Save()方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |