gpt4 book ai didi

vb.net - 从函数返回(带有函数的匿名类型) - 有更好的方法吗?

转载 作者:行者123 更新时间:2023-12-01 01:30:28 25 4
gpt4 key购买 nike

众所周知,这个问题主要是学术性的,尽管我试图在现实世界的解决方案中使用这个概念。我意识到这个例子是人为的,但我相信这个概念是有效的。

我想写一些这样的流利的代码:

copy(my_first_file).to(my_second_file)

简短,易于阅读和理解,完全合法。所以我这样定义我的复制方法:
Private Function copy(FilePath as String) As Object
Return New With {.to = New Action(Of String)(Function(x) my_real_copy_method(FilePath,x))}
End Function

我意识到我不能将匿名类型强制转换为特定类型(例如实现接口(interface)或其他类),并且我不希望定义特定类的开销只是为了将我想要的流畅名称与实际方法匹配姓名。所以我能够使代码像这样工作:
copy(my_first_file).to.Invoke(my_second_file)

所以那里没有 IntelliSense 或类型感知,我必须包含 Invoke 才能运行该方法。在这些约束下,如何获得更多的类型安全性并排除 Invoke 方法:
  • 从方法
  • 返回的匿名类型
  • 没有额外的类或接口(interface)
  • 最好,我不想将另一个参数传递给告诉返回什么类型的 copy() 方法,除非 copy 成为通用方法(但我认为这意味着定义另一个类/接口(interface),我不想这样做)

  • 我知道这听起来很苛刻,如果我很难,请随时称“Bull”!

    提前致谢。

    最佳答案

    由于 VB 没有泛型方法的返回类型推断,即使没有歧义,也有 没有这样做的方式。

    您可以拥有一个使用泛型返回匿名类型的强类型函数,但您不能使用推断的泛型调用它,您需要明确指定它们。

    Private Function Copy(Of T)(filePath as String, prototype As T) As T
    Return New With { .To = … }
    End Function

    (适用于 .NET 的命名约定)

    这必须按如下方式调用:
    Dim nullAction As Action(Of String) = Nothing
    Dim proto = New With { .To = nullAction }
    Copy(firstFile, proto).To(secondFile)

    关于vb.net - 从函数返回(带有函数的匿名类型) - 有更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5184178/

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