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()为泛型参数添加
公共无参数构造函数
约束。编辑了我的问题,请您看一看。您对此有何看法?@AlekseyTimoshchenko
config=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();
    }