VB.Net中的赋值表达式

时间:2014-10-10 20:53:08

标签: c# vb.net

a = b = 5 in VB.NET - impossible?不同, 我特别要求一种扩展方法来克服这个问题。

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

a = b = c = 16;

所有变量最终都是16。 Why do assignment statements return a value?中的答案之一说明了为什么这很方便。

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

Dim a, b, c As Integer
a = b = c = 16

你得到的所有内容都是0,b和c。

我想通过扩展方法来打败这个限制。可以这样做吗?

编辑:

这是我个人可以提出的最接近的答案:

  <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)))
它确实很笨拙,而且更难以遵循,但它最能直接回答我能找到的实际问题。我欢迎任何改进。

1 个答案:

答案 0 :(得分:0)

正如a = b = 5 in VB.NET = impossible?中提到的γnράσκωδ'αείπολλάδιδασκόμε,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个赋值。