不,基本上。有几个技巧你可以做,但只有它足够重要。
你可以这样做:通过像
var dest = item.Convert().To<Something>();
:
static ConversionStub<TInput> Convert<TInput>(this TInput input) {
return new ConversionStub<TInput>(input); }
其中:
struct ConversionStub<T> {
private readonly T input;
public ConversionStub(T input) { this.input = input; }
public TResult To<TResult>() {
/* your code here */
}
}
您也可以通过挂钩操作路径做一些事情dynamic
,但这会导致价值类型的拳击;但如果您的Convert
方法返回dynamic
,其中dynamic
有问题是您自己的提供者,那就可以。
但基本上:
class ConversionStub<T> : DynamicObject
{
private readonly T input;
public ConversionStub(T input){
this.input = input;
}
public override bool TryConvert(ConvertBinder binder, out object result)
{
if(/* you can do it*/)
{
result = // your code here
return true;
}
result = null;
return false;
}
}
有:
static dynamic Convert<TInput>(this TInput input) {
return new ConversionStub<TInput>(input); }
然后:
SomeType dest = item.Convert();
应该做的工作。
您必须在方法签名中指定它们,但在方法调用时,编译器*可能能够从所提供的参数和您试图将其返回的类型推断出它们。 –
如果你做'NewObject ob = item.ConvertType()'编译器现在将它转换为'OriginalObject'和'NewObject' – wudzik