[英]Assignment Expression in VB.Net
與VB.NET中的a = b = 5不同-不可能嗎? ,我專門要求一種擴展方法來克服這一問題。
在C#中,您可以執行以下操作,這非常有幫助:
a = b = c = 16;
所有變量最終都是16。 為什么賦值語句返回值中的答案之一? 給出了為什么這樣方便的原因。
但是在VB.Net中,如果您這樣做:
Dim a, b, c As Integer
a = b = c = 16
您得到的都是a,b和c的0。
我想通過擴展方法來克服此限制。 能做到嗎?
編輯:
這是我個人可以想到的最接近的答案:
<System.Runtime.CompilerServices.Extension()>
Public Function Assign(ByRef Operand1 As Object, ByRef Operand2 As Object) As Object
Operand1 = Operand2
Return Operand1
End Function
即使它允許您這樣做,
Dim a, b, c As Integer
a.Assign(b.Assign(c.Assign(16)))
它肯定比較笨拙且難以理解,但這是對我可以找到的實際問題的直接答案最接近的東西。 我歡迎任何改進。
如在VB.NET中a = b = 5中提到的那樣? 通過γηράσκωδ'αείπολλάδιδασκόμε,VB對賦值和相等使用相同的運算符,並且您無法根據Tim的注釋進行擴展運算符,因此唯一的方法就是通過已發現的擴展方法。
如果重載擴展方法以接受多個參數,則擴展方法的語法會更簡潔。 我猜3個作業就足夠了。 這里是為Integer類型編寫的,因此您不必費心轉換,但可以根據需要使用Object。
<System.Runtime.CompilerServices.Extension> _
Public Sub Assign(ByRef aInt As Integer, ByRef newInt As Integer)
newInt = aInt
End Sub
<System.Runtime.CompilerServices.Extension> _
Public Sub Assign(ByRef aInt As Integer, ByRef newInt1 As Integer, ByRef newInt2 As Integer)
newInt1 = aInt
newInt2 = aInt
End Sub
<System.Runtime.CompilerServices.Extension> _
Public Sub Assign(ByRef aInt As Integer, ByRef newInt1 As Integer, ByRef newInt2 As Integer, ByRef newInt3 As Integer)
newInt1 = aInt
newInt2 = aInt
newInt3 = aInt
End Sub
用法:
Dim a, b, c, d As Integer
a = 16
a.Assign(b)
a.Assign(c, d)
Console.Write("b = {0}; c = {1}; d = {2}", New Object() {b, c, d})
a = 99
a.Assign(b, c, d)
Console.Write("b = {0}; c = {1}; d = {2}", New Object() {b, c, d})
如果願意,可以繼續添加更多的重載,如果要分配N個,則可以包含一個帶有數組或列表的重載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.