我有一个返回类型T的泛型方法。现在我想修改它,以便如果T碰巧实现接口I,则在对象上设置一个附加属性(即从I开始)。
像这样(但当然这不起作用):
public T MyMethod<T>()
{
T resultAsT = some function ....
var resultAsI = (resultAsT as I);
if (resultAsI != null)
{
resultAsI.PropertyOnlyAvailableInI = 99;
return resultAsI;
}
else
return resultAsT;
}
这样的事情可能吗?
答案 0 :(得分:7)
这应该有效:
public T MyMethod<T>()
{
T resultAsT = some function ....
var resultAsI = (resultAsT as I);
if (resultAsI != null)
{
resultAsI.PropertyOnlyAvailableInI = 99;
}
return resultAsT;
}
该方法无法返回T
以外的任何内容,因此您应始终返回resultAsT
。
答案 1 :(得分:-1)
如果你真的想让它发挥作用,那么你可以这样做:
public object MyMethod()
{
object resultAsT = something;
var resultAsI = (resultAsT as ISomething);
if (resultAsI != null)
{
resultAsI.PropertyOnlyAvailableInI = 99;
return resultAsI;
}
else
return resultAsT;
}
但在我看来,你想做一个实现战略模式的工厂。 在使用策略模式创建对象的地方执行初始化对象的某些属性。