我正在尝试使用NBuilder生成一些测试数据,以便为扩展基类的所有类实现自动化,其中每个类将具有不同的字段。
这是我的代码:
public interface Interface
{
T method<T>() where T : BaseClass;
}
public class DrivedClass: BaseClass,Interface
{
public T method<T>() where T : BaseClass
{
var derviedObj = Builder<DrivedClass>.CreateNew().Build();
return derviedObj;
}
}
return derviedObj
提供错误无法将derviedObj
转换为T
答案 0 :(得分:2)
我对nbuilder并不熟悉,但看起来你可以尝试这样的事情:
public class DrivedClass: BaseClass,Interface
{
public T method<T>() where T : BaseClass
{
var derviedObj = Builder<T>.CreateNew().Build();
return derviedObj;
}
}
或者,如果那是你真正想要的:
public class DrivedClass: BaseClass,Interface
{
public T method<T>() where T : BaseClass
{
var derviedObj = Builder<DrivedClass>.CreateNew().Build();
return derviedObj as T;
}
}
然后你会得到T
,但是真的没有机会知道它会成功。添加另一个不会继承DrivedClass
的实现时会发生什么?
public class MoreDrivedClass : BaseClass, FooInterface
{
}
然后这个演员会失败:
var drivedClass = new DrivedClass();
var foo = drivedClass.method<MoreDrivedClass>();
然后您将无法将DrivedClass
投射到MoreDrivedClass
。 Foo
将为空。
答案 1 :(得分:1)
该方法无法返回DerivedClass
,因为无法知道T
是该类还是其他类:
SomeOtherDerived v = (new DrivedClass()).method<SomeOtherDerived>();
目前尚不清楚您想要实现的目标,可能类似于以下示例:
public interface Interface<T> where T : BaseClass
{
T method();
}
public class DrivedClass: BaseClass,Interface<DerivedClass>
{
public DerivedClass method()
{
DerivedClass derviedObj = Builder<DrivedClass>.CreateNew().Build();
return derviedObj ;
}
}
答案 2 :(得分:0)
尝试使用Activator.CreateInstance。
String