不,基本上。有幾個技巧你可以做,但只有它足夠重要。
你可以這樣做:通過像
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