難道我(如果有的話如何)做了在.NET語言(更具體VB.NET)以下:.NET使用IIF價值分配給不同的變量
Dim a,b as Integer
if(somecondition=1,a,b) = 12345
或者與IIF的任何變種會我沒意見。 基本上我總是分配相同的值,但從來沒有對同一個變量。
難道我(如果有的話如何)做了在.NET語言(更具體VB.NET)以下:.NET使用IIF價值分配給不同的變量
Dim a,b as Integer
if(somecondition=1,a,b) = 12345
或者與IIF的任何變種會我沒意見。 基本上我總是分配相同的值,但從來沒有對同一個變量。
你要求做的事情是用一種支持指針類型的語言(如C/C++或C#處於不安全模式)進行解引用; VB.NET不這樣做。你最好利用的是局部變量,參考類型和(或許)ByRef
。
如果它是一個Class
,它的實例化是一個引用類型。 Structure
和Integer
都是值類型。
對於大多數參考類型,您可以設置一個局部變量等於任何感興趣的變量,然後繼續設置其屬性或調用其方法,以確信受影響的實例化是所需的。一個例外是當引用是不可變的類型時,比如String
。
Dim a, b As New System.Text.StringBuilder()
Dim sb As System.Text.StringBuilder = If(somecondition = 1, a, b)
sb.Append("OK!")
其實,一個不一定需要一個局部變量與引用類型。
' Method 2
Call If(somecondition = 1, a, b).Append("OK!")
' Method 3
With If(somecondition = 1, a, b)
.Append("OK!")
End With
對於值類型(以及不可變類),您相當困難。大多數情況下,人們可以做的就是利用局部變量作爲代理,就像Jon Skeet所說的那樣。
的模式我有時用自己:
Dim a, b As Integer
If True Then
Dim _v As Integer = 12345
If somecondition = 1 Then a = _v Else b = _v
End If
注意使用If True Then
- 這是如此的_v
壽命在End If
結束。 「這麼做」是爲了避免:(1)有一長串臨時變量;或(2)考慮到涉及重用臨時變量的常見編碼錯誤的機會。臨時變量名稱(例如「_v」)可以被重用,即使它是一種不同的數據類型,因爲它將是編譯器的一個不同的變量。
接受,謝謝你的詳細解答。 – jplanglais
不,我不相信在VB中有這樣做的任何方式。有條件的操作符(例如If(x, y, z)
)被設計爲基於條件來評估一個表達式或另一個。換句話說,結果是有條件的,而不是它的使用。
只需使用一個正常的If
聲明:
If somecondition Then
a = 12345
Else
b = 12345
End If
或避免重複值(例如,如果它是一個更復雜的表達式):在VB
Dim value As Integer = 12345
If somecondition Then
a = value
Else
b = value
End If
查看我對原始帖子的評論 – jplanglais
@jplanglais:這並不能改變你無法做到的事實。您可以預先避免使用局部變量重複該值,但這就是它。 –
,而是因爲在C#中的分配返回分配的值,可以在C#中執行以下操作(因爲您提到'任何.NET語言'):
int unused = (someCondition ? a = 123 : b = 123);
不完全相同 - OP在這裏希望某種乾燥模式。也許更像'*((someCondition == 1)?&a:&b)= 12345'。 – rskar
你不能使用這樣的結構。你可能會有這樣的單行語句:'如果somecondition = 1然後a = 12345否則b = 12345' – Blackwood
我明顯地簡化了我的問題(例子),但它更復雜並涉及多個條件;加上我的價值不像我的例子那樣是靜態的。因此,我想真實地避免使用多個Ifs .. – jplanglais
如果你的情況更復雜,很難看到你希望如何以這種方式簡化它。也許你應該編輯你的例子來更復雜一點。 – Blackwood