表达式不会在接口ICollection中生成值

时间:2015-02-04 18:04:13

标签: .net wpf vb.net

我正在使用Visual Studio 2013 / .NET Framework 4.5开发Windows Presentation Foundation(WPF)项目。这是在VB.NET中。

我正在尝试访问以前从未做过的TFS数据,所以我正在使用教程。但是,本教程是在C#中,所以我转换了代码。 C#代码编译并运行没有错误,但VB代码没有。

C#:

public static class ExtensionsMethods
    {
        public static void AddOnUi<T>(this ICollection<T> collection, T item)
        {
            Action<T> addMethod = collection.Add;
            Application.Current.Dispatcher.BeginInvoke(addMethod, item);
        }
    }

VB:

Public Module ExtensionsMethods
        Sub New()
        End Sub
        <System.Runtime.CompilerServices.Extension> _
        Public Sub AddOnUi(Of T)(collection As ICollection(Of T), item As T)
            Dim addMethod As Action(Of T) = collection.Add                
            Application.Current.Dispatcher.BeginInvoke(addMethod, Item)
        End Sub
    End Module

编译器在第六行给出错误 - 没有为'Public Sub Add(item as T)'的参数'item'指定参数

如果我添加参数,如下:

Dim addMethod As Action(Of T) = collection.Add(item)

我得到一个不同的错误 - Expression不会产生值

我不熟悉扩展方法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

行动(Of T)是代表。 AddressOf 可用于创建一个。

Public Module ExtensionsMethods
    Sub New()
    End Sub
    <System.Runtime.CompilerServices.Extension> _
    Public Sub AddOnUi(Of T)(collection As ICollection(Of T), item As T)
        Dim addMethod As Action(Of T) = AddressOf collection.Add
        Application.Current.Dispatcher.BeginInvoke(addMethod, item)
    End Sub
End Module