首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从函数返回一个(带有函数的匿名类型)--有更好的方法吗?

从函数返回一个(带有函数的匿名类型)--有更好的方法吗?
EN

Stack Overflow用户
提问于 2011-03-03 17:24:01
回答 3查看 6.1K关注 0票数 4

众所周知,这个问题大多是学术性的,尽管我试图在现实世界的解决方案中使用这个概念。我知道这个例子是人为的,但我相信这个概念是正确的。

我想写一些流利的代码如下:

代码语言:javascript
复制
copy(my_first_file).to(my_second_file)

短小,通俗易懂,完全合法。因此,我定义我的复制方法如下:

代码语言:javascript
复制
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

我意识到,我不能强迫匿名类型进入特定类型(比如实现接口或其他类),我不希望定义特定类的开销只是为了将我想要的流利名称与实际的方法名称匹配起来。因此,我能够使代码像这样工作:

代码语言:javascript
复制
copy(my_first_file).to.Invoke(my_second_file)

因此,这里没有IntelliSense或类型识别,我必须包含Invoke才能运行该方法。在以下约束条件下,如何获得更多的类型安全性并排除调用方法:

  • 方法返回的匿名类型
  • 没有额外的类或接口
  • 最好是,我不想将另一个参数传递给copy()方法,该方法告诉返回什么类型,除非copy变成一个泛型方法(但我认为这意味着定义另一个类/接口,我不想这么做)

我知道这听起来很苛刻,如果我太难的话,可以随便叫“公牛”!

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-03 17:41:26

因为VB没有泛型方法的返回类型推断,即使在没有歧义的地方,也没有的方法。

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

代码语言:javascript
复制
Private Function Copy(Of T)(filePath as String, prototype As T) As T
    Return New With { .To = … }
End Function

(与.NET相适应的命名约定)

这必须如下所示:

代码语言:javascript
复制
Dim nullAction As Action(Of String) = Nothing
Dim proto = New With { .To = nullAction }
Copy(firstFile, proto).To(secondFile)
票数 3
EN

Stack Overflow用户

发布于 2011-03-03 17:44:32

对不起,这是我能想到的最好的了。它不符合您的requirements....but,它确实提供了您想要的语法。

代码语言:javascript
复制
Sub Main()
    copy("myFile").To("myOtherFile")
End Sub

Private Function copy(ByVal FilePath As String) As String
    Return FilePath
End Function

<Extension()> _
Public Sub [To](ByVal FromFile As String, ByVal ToFile As String)
    ' Code to really copy goes here
    my_real_copy_method(FromFile, ToFile)
End Sub
票数 1
EN

Stack Overflow用户

发布于 2011-03-04 13:48:59

我知道你说你的例子是人为的,但这个怎么样?它支持方法链接(CopyTo 返回 a FileInfo),即使它不是流利。它也内置在System.IO中。

代码语言:javascript
复制
Dim f As New FileInfo("c:\x.txt")
f.CopyTo("c:\y.txt")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5184178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档