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;
因为 T
是 BaseClass
的子代,它应该具有基础 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;
}
}
我有一个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
.
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;
因为 T
是 BaseClass
的子代,它应该具有基础 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;
}
}