我有以下代码
public interface IInterface
{
}
public class GenericClass<TSomeClass>
where TSomeClass : class
{
public TSomeClass SomeMethod(TSomeClass someClass = null)
{
return SomeClass.SomeClassStaticInstance; //ERROR:Cannot implicitly convert type 'SomeClass' to 'TSomeClass'
return (TSomeClass)SomeClass.SomeClassStaticInstance; //ERROR:Cannot convert type 'SomeClass' to 'TSomeClass'
return SomeClass.SomeClassStaticInstance as TSomeClass; //Works when "where TSomeClass : class" clause added
}
}
public class SomeClass : IInterface
{
public static SomeClass SomeClassStaticInstance = new SomeClass();
}
它会在相应行的注释中生成编译时错误。
我想知道为什么我不能只使用产生错误的第一行? SomeClass
实现了IInterface
,但我不得不弄乱as
关键字。
我已经尝试将GenericClass<TSomeClass>
更改为GenericClass<out TSomeClass>
,但是即使我删除了Only interface and delegate type parameters can be specified as variant.
子句,我仍然遇到另一个编译时错误where TSomeClass : class
,该错误仍然存在。
我想念的是什么……显然很有效,因为我可以使用where TSomeClass : class
子句和return SomeClass.SomeClassStaticInstance as TSomeClass;
语句将其“强制”!
我实际上确实需要where TSomeClass : class
,否则我会收到TSomeClass someClass = null
... A value of type '<null>' cannot be used as a default parameter because there are no standard conversions to type 'TSomeClass'
的另一个编译时错误。
所以基本上是从头到尾编译时间错误!谢谢。
我有以下代码公共接口IInterface {}公共类GenericClass
您尚未指定强制执行TSomeClass
来实现IInterface
的通用类型约束:
您需要将返回类型从类更改为接口