[英]Shortest way of assigning only if source variable is not null
我只是讀了最短的方法來檢查null,如果沒有 , 則分配另一個值 ,但是問題仍然存在。
考慮以下常見的代碼模式:
if ( !string.IsNullOrEmpty(source) )
dest = source;
可以使用
null-coalescing運算符將其表示為
單線 :
dest = source ?? dest;
[編輯:]感謝@Rango意識到這些並不等效。 但以下確定是:
dest = !string.IsNullOrEmpty(source) ? source : dest;
但是,人們可能會猜測這種選擇並不嚴格等同於前一種(盡管可以觀察到的結果是)。 我在這種情況下說“猜測”是因為我不確定IL字節碼是否相同。
在這兩種情況下,在source
為null的情況下,是否有任何更短的方法不分配任何變量,甚至不分配原始值給變量dest
? 即使使用按位運算符或其他更巧妙的技巧。 我實際上希望的語法類似於空條件運算符 。
謝謝。
我已經使用C#很久了,據我所知,答案是否定的。
您有兩個選擇:
1.)使用if檢查來使邏輯短路,並在不需要時跳過該邏輯。 平均而言,這應該是最快執行的。
2.)使用三元運算符檢查並分配一行。 根據中間編譯器的不同,它可能會稍慢一些,但是應該是實現這種效果的最短代碼(至少是可讀的)。
最終,問題歸結為有效地是不可變數組的字符串。 如果String已經在內存中,賦值就像分配整數一樣快(因為要引用現有變量,所以賦值就可以了),但是檢查null和empty是至少兩項檢查(null檢查和長度檢查),這可以避免避免維護功能。 三元組中的額外分配實際上是執行速度的唯一變量(而if版本在null時會短路)。
因此,無論如何,您都需要進行檢查,並在必要時執行分配。 最終,我看不出有什么方法可以避免這種情況,所以它不會比這兩個用例更快或更短。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.