gpt4 book ai didi

c# - VB.Net 中的赋值表达式

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:51 24 4
gpt4 key购买 nike

不同于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

对于 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)))

它确实很笨重而且很难理解,但它是我能找到的最接近我实际问题的直接答案的东西。我欢迎任何改进。

最佳答案

a = b = 5 in VB.NET = impossible? 中所述通过 γηρασκωδ'αείπολλάδιδασκόμε,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 次赋值,则包括一个带有数组或列表的重载。

关于c# - VB.Net 中的赋值表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26307867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com