C# VB.Net中的赋值表达式

C# VB.Net中的赋值表达式,c#,vb.net,C#,Vb.net,不像, 我特别要求一种扩展方法来克服这个问题 在C#中,您可以执行以下操作,这非常有用: a = b = c = 16; 所有变量最终都是16。 中的一个答案给出了这很方便的原因 但在VB.Net中,如果您这样做: Dim a, b, c As Integer a = b = c = 16 你只得到a、b和c的0分 我想通过一种扩展方法来克服这个限制。这能做到吗 编辑: 以下是我个人能想到的最接近的答案: 将公共函数赋值(ByRef操作数1作为对象,ByRef操作数2作为对象)作为对象 操

不像, 我特别要求一种扩展方法来克服这个问题

在C#中,您可以执行以下操作,这非常有用:

a = b = c = 16;
所有变量最终都是16。 中的一个答案给出了这很方便的原因

但在VB.Net中,如果您这样做:

Dim a, b, c As Integer
a = b = c = 16
你只得到a、b和c的0分

我想通过一种扩展方法来克服这个限制。这能做到吗

编辑:

以下是我个人能想到的最接近的答案:


将公共函数赋值(ByRef操作数1作为对象,ByRef操作数2作为对象)作为对象
操作数1=操作数2
返回操作数1
端函数
即使它允许你这么做

Dim a, b, c As Integer
a.Assign(b.Assign(c.Assign(16)))
它确实很笨重,我也很难理解,但它是我能找到的最接近我实际问题的直接答案。我欢迎任何改进。

正如γηρσκωδ'αεπλλλλλλλλλδασκμε中提到的,VB使用相同的运算符进行赋值和相等,并且您不能根据Tim的注释生成扩展运算符,因此唯一的方法是通过您发现的扩展方法

如果重载扩展方法以接受多个参数,则扩展方法的语法会更清晰;我猜3个作业就够了。这里它是为整数类型编写的,所以您不必费心强制转换,但如果您愿意,可以使用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

如果愿意,您可以继续添加更多重载,包括一个带有数组或列表的重载(如果您想要N个赋值)

@γηρρσκω′αεπλλλδδασκμε,我想这可能是重复的,但它的标题和措辞确实很糟糕,问得也很糟糕。很难找到。我想我的更清楚。但是谢谢,我会读的。另外,我特别要求一个扩展。如果你真的阅读了链接中的答案,你会得到你想要的。@γηρ∑κωδ'αε∑π∑λ∧λ∑δ∑ακ∑με,扩展方法不能重新定义运算符吗?(我不经常使用扩展方法,但当我使用时,它们确实很方便)@toddmo:extensions不能重载操作符
        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})