簡體   English   中英

僅當源變量不為null時分配的最短方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM