C# 为什么我会得到警告;你不能把一种类型转换成另一种类型吗?
我有这个方法:C# 为什么我会得到警告;你不能把一种类型转换成另一种类型吗?,c#,C#,我有这个方法: public类型GetObjBy(),其中类型:BaseConfiguration { 类型=类型(类型); if(type==typeof(MCConfiguration)) { return(TYPE)new MCConfiguration();出现此错误是因为GetObjBy方法可用于从BaseConfiguration派生的任何类型: class MappingSchemaTest : BaseConfiguration {} class MappingSchemaTe
public类型GetObjBy(),其中类型:BaseConfiguration
{
类型=类型(类型);
if(type==typeof(MCConfiguration))
{
return(TYPE)new MCConfiguration();出现此错误是因为GetObjBy
方法可用于从BaseConfiguration
派生的任何类型:
class MappingSchemaTest : BaseConfiguration
{}
class MappingSchemaTestImpl : BaseConfiguration
{
T GetObjBy<T>() where T : BaseConfiguration
{
return new MappingSchemaTestImpl();
}
void Use()
{
var t = GetObjBy<MappingSchemaTest>();
}
}
PPS的另一个选项是不返回泛型,而是返回基类或类似的接口
BaseConfiguration GetObjBy<T>() where T : BaseConfiguration
{
if (true)
return new MCConfiguration();
else
return new MCConfiguration2();
}
BaseConfiguration GetObjBy(),其中T:BaseConfiguration
{
如果(真)
返回新的MCConfiguration();
其他的
返回新的MCConfiguration2();
}
为什么您要再次将MCConfiguration
转换为TYPE
,因为它继承了基类,所以不需要再进行类型转换。您可以分享一下如何调用该方法?@prasadelkikikar它不是netter它不起作用两个问题1)如果它们都扩展了相同的基类,为什么我可以返回一个类型而不能返回另一个类型其中T:BaseClass
?和2)您能解释一下在这种上下文中它是什么意思吗?@AlekseyTimoshchenko 1)泛型参数是关于泛型的东西。它应该有用于类集的泛型东西。但是您的实现返回(TYPE)new MCConfiguration()
不允许任何其他与MCConfiguration
不同的泛型参数。2 new()为泛型参数添加公共无参数构造函数
约束。编辑了我的问题,请您看一看。您对此有何看法?@AlekseyTimoshchenkoconfig=default(TYPE)
对于引用类型(类)为null,因此您返回null
。您必须更改GetObjBy
以返回BaseConfiguration
或使用new()
约束并返回new T()
class MappingSchemaTest : BaseConfiguration
{}
class MappingSchemaTestImpl : BaseConfiguration
{
T GetObjBy<T>() where T : BaseConfiguration
{
return new MappingSchemaTestImpl();
}
void Use()
{
var t = GetObjBy<MappingSchemaTest>();
}
}
T GetObjBy<T>() where T : BaseConfiguration, new()
{
return new T();
}
BaseConfiguration GetObjBy<T>() where T : BaseConfiguration
{
if (true)
return new MCConfiguration();
else
return new MCConfiguration2();
}