いいえ、基本的に。できることはいくつかありますが、それが十分に重要な場合に限られます。
次のようなことができます:
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();
仕事をするべきです。