非泛型类型不能与类型参数一起使用

本文关键字:一起 类型参数 泛型类型 不能 | 更新日期: 2023-09-27 17:50:30

我有以下类的层次结构:

public abstract class SerializedDelegateBase<TDelegate, TTarget>
    where TDelegate : class
    where TTarget : class
{
   ...
}
public abstract class SerializedMBDelegateBase<TDelegate> : SerializedDelegateBase<TDelegate, MonoBehaviour> where TDelegate : class
{
   ...
}
public class ParameterizedSerializedDelegate<T> : SerializedMBDelegateBase<Action<T>> where T : EventArgs
{
   ...
}

最后:

[Serializable]
public class OnTransitionArg : EventArgs
{
    public string TransitionName { set; get; }
}
[Serializable]
public class OnTransitionDelegate : ParameterizedSerializedDelegate<OnTransitionArg> { }

现在由于一些奇怪的原因,我得到"非泛型类型'ParameterizedSerializedDelegate'不能与类型参数一起使用"当我从ParameterizedSerializedDelegate继承

时,我的OnTransitionDelegate

我不知道为什么。

谁知道?

谢谢!

编辑:

我可能应该提到,这些类在不同的文件中。我只是在一个文件中尝试了一个最小但类似的通用参数设置,它工作了!-我不知道我的实际设置有什么不同…

非泛型类型不能与类型参数一起使用

似乎我正在编辑'另一个'版本的ParameterizedSerializedDelegate文件-所以一个VS正在看的是不同的。

@vexe的解决方案为我工作,但我找出了我所做的复制它(解释将使用原始问题类型名称)。

在VS2013中,当您使用CTRL-.快捷菜单而不注意时,可能会发生这种情况。而不是选择"添加<<命名空间>>",可以选择"Generate class for…",这将创建一个名为ParameterizedSerializedDelegate的新存根类,与OnTransitionDelegate在同一文件夹中。

令人困惑的是,如果你在上面的例子中点击ParameterizedSerializedDelegate上的F12(转到定义),它会找到它的通用版本并带你到那里-即使该名称空间在该文件中不可用。