簡體   English   中英

VB.Net中的賦值表達式

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

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