【问题标题】:.NET generate generic method - compact framework.NET 生成泛型方法 - 紧凑的框架
【发布时间】:2014-03-06 20:58:34
【问题描述】:

这是我正在寻找一种生成通用委托的方法的原始问题: .Net generate generic methods

这是在 .NET 3.5 中生成通用委托的代码:

public delegate void PropertyChangedDelegate<OwnerType, PropertyType>(OwnerType sender, String propertyName, PropertyType oldValue, PropertyType newValue);

EventInfo eventInfo = type.GetEvent(property.Name + "Changed");
MethodInfo propertyChangedMethodInfo = this.GetType().GetMethod("content_PropertyChanged", BindingFlags.NonPublic | BindingFlags.Instance);
MethodInfo genericPropertyChangedMethodInfo = propertyChangedMethodInfo.MakeGenericMethod(eventInfo.EventHandlerType.GetGenericArguments());
Delegate delegate_ = Delegate.CreateDelegate(eventInfo.EventHandlerType, genericPropertyChangedMethodInfo);
eventInfo.AddEventHandler(obj, delegate_);

void content_PropertyChanged<OwnerType, PropertyType>(OwnerType sender, String propertyName, PropertyType oldValue, PropertyType newValue)
{
}

这在 .NET 3.5 中有效,但是现在当我尝试移植到紧凑框架 3.5 时,Delegate.CreateDelegate 方法需要第三个参数...参数说明说:

它应该是第一个参数,或者'委托的对象 已绑定”。

我尝试将“obj”、“this”和 null 放在那里,但我总是得到一个无效的参数异常。

有什么想法吗?

【问题讨论】:

  • 会不会是compact平台的另外两个参数有问题?
  • 我在桌面 .NET 上用三个类似的参数尝试了完全相同的操作,并且成功了:Delegate delegate_ = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, genericPropertyChangedMethodInfo);
  • 我仔细看了看,错误说:“不支持 Open Generic 方法的 ReturnType”......嗯
  • 我认为这个问题是相关的:stackoverflow.com/questions/18148849/…

标签: c# .net generics


【解决方案1】:

很遗憾,.NETCF(.NET Compact Framework)不支持与 .NET(完整框架)相同的方法签名,因为只实现了一个子集。

您可以在MSDN library 上看到这一点,其中十个方法重载中只有一个是“.NET Compact Framework 支持”,用 PDA/移动设备的小图形表示。

这意味着您必须在 .NETCF 中使用 Delegate.CreateDelegate(Type, Object, MethodInfo)

【讨论】:

    【解决方案2】:

    请检查下面链接中的示例部分,看看是否有帮助。

    http://msdn.microsoft.com/en-us/library/74x8f551.aspx

    问候,

    查希尔汗

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2011-02-26
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多