不,基本上。您可以做一些技巧,但前提是它足够重要。
您可以执行以下操作:
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();
应该做的工作。