意外的“非泛型类型不能与类型参数一起使用”?

时间:2014-03-15 22:44:09

标签: c# generics generic-type-argument

我有以下类的层次结构:

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> { }

现在出于一些奇怪的原因,当我从OnTransitionDelegate ParameterizedSerializedDelegate上的“非泛型类型'ParameterizedSerializedDelegate'不能与类型参数一起使用” >

我不知道为什么。

任何人

谢谢!

修改

我应该提一下这些类是在不同的文件中。我只是尝试了一个文件中的泛型参数的最小但相似的设置,它工作了! - 我不知道我真正的设置有什么不同......

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

@ vexe的解决方案对我有用但我找到了我做的重现它(解释将使用原始问题类型名称)。

在VS2013中,当您使用CTRL-.快捷菜单而不注意时,可能会发生这种情况。不是选择“添加&lt;&lt;&lt;&gt;&gt;&gt;”,而是可以选择“为...生成类”,这将在与{{相同的文件夹中创建一个名为ParameterizedSerializedDelegate的新存根类。 1}}。

令人困惑的是,如果您在上面的示例中点击了OnTransitionDelegate(转到定义){@ 1}},它会找到它的通用版本并带您到那里 - 即使名称空间是在该文件中不可用。