缺少Action <t> </t>的程序集

时间:2011-05-20 14:13:08

标签: c# .net .net-assembly

Action<T>一起使用的程序集是什么?我收到一个错误,T没有被接受,缺少一个程序集或命名空间。

Method(delegate { OnChange(); });


    private static void MethodUsingOtherMethod(Action<T> action)
    {
      //TODO
    }

如果我在<T>之后添加额外的MethodUsingOtherMethod,则接受T,但之后上述代理中的参数无法识别。

我想在第二种方法中使用OnChange(),从那里调用。

2 个答案:

答案 0 :(得分:3)

您必须将方法声明为通用方法:

private static void MethodUsingOtherMethod<T>(Action<T> action)
    {
      //TODO
    }

编辑:顺便说一下,如果你需要传入的委托来获取类型T的参数,你只需要这样做。如果你需要传入一个无参数方法,那么定义你的方法如下:

private static void MethodUsingOtherMethod(Action action)
    {
      //TODO
    }

答案 1 :(得分:1)

Action<T>表示您需要传递一个委托,接受类型为T的1个参数。因此,如果要传递OnChange,则只需指定Action而不指定T.

这样,您的代码将如下所示:

MethodUsingOtherMethod(OnChange);


private static void MethodUsingOtherMethod(Action action)
{
  //TODO
}

关于T无法识别的错误是,因为您没有将方法声明为通用方法(通过将<T>放在方法名称后面来完成)。因此,编译器不会将T识别为类型参数,并尝试查找名为T的类型,该类型不存在。

你可能想查找泛型以了解那里发生了什么:
http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx