Windows运行时方法不能通用 - 原因,解决方法,替代方案?

flq*_*flq 13 c# windows-runtime windows-store

这是一个接口,取决于我尝试将我维护的事件聚合器MemBus移植到Windows运行时世界:

public interface ISubscriber
{
    IDisposable Subscribe<M>(Action<M> subscription);

    #if WINRT 
    [Windows.Foundation.Metadata.DefaultOverload]
    #endif
    IDisposable Subscribe(object subscriber);

    IObservable<M> Observe<M>();
}
Run Code Online (Sandbox Code Playgroud)

我得到的是编译器错误:

"错误WME1031:' MemBus.ISubscriber.Subscribe<M>(System.Action<M>)'是一种通用方法.Windows运行时方法不能通用."

我只怀疑为什么会这样,如果有人可以澄清,请做.

我的主要问题是:在将代码移植到Windows运行时时,我们应该如何处理这个问题

泛型有很多更高级别的功能.实际上,我们在Windows运行时使用泛型类(例如List<T>).RT组件应该如何公开泛型类型,如果不是,它是唯一可用的方法,可以回到编写.NET 1.1代码的方式,即对象输入,对象输出和执行转换?

Bre*_*ter 11

您需要从Windows应用商店模板(而不是Windows运行时组件模板)中选择一个类库模板.

截图VS2012

这将允许您在Windows应用商店应用中使用完整的C#语言,但不允许其他语言(如C++和JS)使用程序集(因为它们不像C#那样支持泛型).


Jef*_*and 6

简短的故事是JavasScript不知道如何处理泛型,因此WinRT组件不能使用它们.请参阅WinRT原因,禁止使用自定义通用类型或接口进行较长时间的讨论.