我想做以下事情:
public class My<T>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
我得到'无法解析符号S'。 有可能以某种方式做到这一点吗?如果没有,为什么? 我无法改变G,这不是我的班级。
答案 0 :(得分:1)
您需要:
<S>
或G<S>
(即用非泛型类型,界面等替换它)。或将S
作为通用参数添加到类型:
public class My<T, S>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
答案 1 :(得分:1)
与成员函数不同,构造函数不能在其声明中指定泛型类型。要解决此问题,您需要将泛型类型从构造函数中提升到类声明中:
public class My<T,S>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
如果您打算使用各种构造函数来获取其他泛型类型,则可能会出现问题。
答案 2 :(得分:0)
只需在您的方法中明确声明S:
public class My<T, S>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
这将编译(除非你在G类的S上有一些条件)。在使用My class时,您必须声明S是什么。
示例将G&lt; S&gt; = Nullable&lt; S&gt; :
public class My<T, S> where S : struct
{
public My(Nullable<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
使用此实现,您必须在使用My类时定义S(在这种情况下S是int):
var myVar = new My<string, int>(4, string.Empty);
答案 3 :(得分:0)
用户执行后:
public class My<T, S>
{
public My(G<S> g, T t)
{
// Now S will be accessible.
}
}