在内联函数中使用命名值为元组赋值

Assign values to Tuple with named values in inline function

提问人:CompanyDroneFromSector7G 提问时间:7/13/2023 最后编辑:CompanyDroneFromSector7G 更新时间:7/13/2023 访问量:57

问:

我支持使用 VS 2022 和 Framework 4.5.2 的解决方案。

我正在尝试在内联函数内创建一个具有命名值的元组并将其传递给另一个函数。

我知道如何在没有命名参数的情况下内联声明元组并赋值,并且我知道如何用命名值内联声明它,但不赋值。

我该如何做到这两点?

以下是可以的:

Dim q1 =
    myEnumerable.Select(
        Function(x) New Tuple(Of String, String, String)(x.Name, x.URL, x.Name)
    )

但事实并非如此:(我在值下得到红色波浪线)

Dim q2 =
    myEnumerable.Select(
        Function(x) New Tuple(Of (name As String, link As String, tooltip As String))(x.Name, x.URL, x.Name)
    )

我该怎么做?

vb.net 元组 .net-4.5

评论

1赞 jmcilhinney 7/13/2023
为什么这被标记为 .NET 4.8,而您在问题中说 .NET Framework 4.5.2?

答:

2赞 djv 7/13/2023 #1

此语法将在一行中工作,以生成所需的命名元组

Dim q2 = myEnumerable.Select(Function(x) (Name:=x.Name, URL:=x.URL, tooltip:=x.Name))

或者使用前 2 个推断的名称

Dim q2 = myEnumerable.Select(Function(x) (x.Name, x.URL, tooltip:=x.Name))

评论

1赞 CompanyDroneFromSector7G 7/13/2023
谢谢 - 只是想弄清楚我是喜欢你的还是我的。你的更敏捷,我的更明确。
1赞 djv 7/13/2023
此处构造元组时存在隐式类型,例如,如果将 URL 的类型更改为 Url,则无需修改此代码。你的也很好,我第一次看到它
1赞 CompanyDroneFromSector7G 7/13/2023
你更好。我的其实错了!
1赞 CompanyDroneFromSector7G 7/13/2023 #2

最后解决了。我只是需要更多的括号:

Dim q3 =
    myEnumerable.Select(
        Function(x) New Tuple(Of (name As String, link As String, tooltip As String))((x.Name, x.URL, x.Name))
    )