【问题标题】:Cannot get lambda code sample to compile无法获取要编译的 lambda 代码示例
【发布时间】:2013-02-24 13:00:01
【问题描述】:

我想用这里找到的一段简单代码进行实验:

http://msdn.microsoft.com/en-au/library/ff664617%28v=pandp.50%29.aspx

但我无法编译它,我一定是做错了什么。在页面的大约三分之一处,它给出了这样的代码示例:

'使用 exManager.Process(Function() 方法名(param1, param2), _ “例外政策名称”)

但是如果我输入以下代码:

Dim exManager As ExceptionManager
exManager = EnterpriseLibraryContainer.Current.GetInstance(Of ExceptionManager)()
exManager.Process(Function() TestSub(), "Exception Policy Name")

我在第三行收到一条错误消息:

重载解析失败,因为没有可访问的“进程”可以 用这些参数调用: '公共可重写函数进程(TResult)(操作作为 System.Func(TResult),policyName 作为字符串)作为 TResult':不能 从共享方法中引用类的实例成员或 没有类的显式实例的共享成员初始化器。

'Public Overridable Function Process(Of TResult)(action As System.Func(Of TResult), policyName As String) As TResult': Data 无法从这些推断类型参数的类型 论据。明确指定数据类型可能会更正此问题 错误。

等等

即使我尝试像这样修改 lambda:

exManager.Process(Function() Dim A As Integer=6, "Exception Policy Name")

我遇到了类似的错误。

任何 cmets 将不胜感激。

更新:

注意我正在为 .NET Framework 4 客户端配置文件进行编译

【问题讨论】:

  • 保存进程管理器代码的函数是共享子程序吗?
  • @user1937198 实际上是这样,但是我把它放在一个非共享函数中,它没有任何区别

标签: vb.net syntax lambda


【解决方案1】:

当您调用exManager.Process(Function() TestSub(), "Exception Policy Name") 时,您正在使用Process(Of TResult) 重载。

该方法是通用的,期望和类型参数(TResult),在很多情况下可以由编译器推断。现在异常告诉您,在您的情况下,编译器可以推断出TResult

我猜你的TestSub 确实是Sub,因此没有编译器可以用来推断TResult 的返回值。


所以使用非泛型Process 方法,使用Sub 而不是Function

exManager.Process(Sub() TestSub(), "Exception Policy Name")

或者干脆使用AddressOf:

exManager.Process(AddressOf TestSub, "Exception Policy Name")

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 2015-07-03
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多