【问题标题】:Missing assembly for Action<T>缺少 Action<T> 的程序集
【发布时间】:2011-05-20 14:13:07
【问题描述】:

Action&lt;T&gt; 使用的程序集是什么?我收到关于 T 未被接受的错误,即缺少程序集或命名空间。

Method(delegate { OnChange(); });


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

如果我在MethodUsingOtherMethod 之后添加了一个额外的&lt;T&gt;,那么 T 会被接受,但是上面的委托中的参数无法识别。

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

【问题讨论】:

  • 引用 mscorlib 并添加 using System。但是每个程序都引用 mscorlib。
  • 把你的问题写得更连贯一点怎么样?并且也许添加一个显示问题的代码示例。
  • 我正在使用系统;我忽略了别的东西吗?是否应该在 (Actoin 动作) 之前使用 ,你知道这取决于什么吗?
  • 这是与问题相关的代码吗?
  • @CodeInChaos 从技术上讲,可以在项目的高级设置中删除对 mscorlib 的引用,但我认为没有任何理由。

标签: c# .net .net-assembly


【解决方案1】:

您必须将您的方法声明为泛型方法:

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

编辑:顺便说一句,如果您需要传入的委托来获取类型为 T 的参数,您只需要这样做。如果您需要传入无参数的方法,请像这样定义您的方法:

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

【讨论】:

  • 如果我使用上面最上面的那个,我必须更改我的“OnChange();”属于 T 类型。方法可以属于 T 类型吗?因为我想把它传递给代表。
  • 从你的代码sn-p看你不需要传递给方法的参数,所以使用2nd方法定义,和Botz3000的一样
  • 完美,这就是我想要的!
【解决方案2】:

Action&lt;T&gt; 表示您需要传递一个接受 1 个 T 类型参数的委托。因此,如果您想传递 OnChange,则只需指定 Action 而无需 T。

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

MethodUsingOtherMethod(OnChange);


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

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

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

【讨论】:

  • 感谢您的解释。我认为该方法算作参数,但我认为它本身只是一个动作。将研究泛型!
猜你喜欢
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 2016-05-12
  • 1970-01-01
相关资源
最近更新 更多