Return 泛型方法中的基类型而不是派生类型

Return base type instead of derived type in a generic method

我有一个BaseClass如下

public class BaseClass
{
    public string A { get; set;}
    public string B { get; set;}
}

和另一个 class 从 BaseClass 派生如下

public class DerivedClass : BaseClass
{
    public string C { get; set;}
}

我有一个通用方法可以 return 任何继承 BaseClass.

的派生 class
public T MyMethod(bool returnBase) where T : BaseClass
{
    if(!returnBase)
    {
        T result = JsonConvert.DeserializeObject<T>(someString);
        return T;
    }
    else
    {
        BaseClass bc = new BaseClass
        {
            A = "some string",
            B = "some other string"
        };
        return (T)bc;
    }
}

在此代码中,当 returnBase 为 FALSE 时,一切正常,但当它设置为 TRUE 时,我想 return BaseClass,但由于我定义了 return 在调用代码中输入 (T) 作为 DerivedClass,我得到异常。

我怎样才能得到这个代码运行?

这将是转换中的继承错误 (T)bc 因为您不能将父对象转换为子对象。相当于说all Animals are Dogs虽然还有其他动物(比如猫),但肯定不是狗

为了得到它 运行,我建议按以下方式实现 else

T defaultObj = new T
{
   A = "some string",
   B = "some other string"
}

return defaultObj;

因为 TBaseClass 的子代,它应该具有基础 class.

的所有属性

只需将方法 return 类型设置为 BaseClass 并在 return base

时避免 (T) 转换
public BaseClass MyMethod(bool returnBase) where T : BaseClass
{
    if(!returnBase)
    {
        T result = JsonConvert.DeserializeObject<T>(someString);
        return T;
    }
    else
    {
        BaseClass bc = new BaseClass
        {
            A = "some string",
            B = "some other string"
        };
        return bc;
    }
}