我有這樣的代碼:轉換包裝<Derived>爲包裝<Base>
class Base { }
class Derived : Base { }
class Wrapper<T> {
public T Value { get; }
public Wrapper (T value) { Value = value; }
}
我想用Wrapper
這樣的:
Wrapper<Base> wrapper = new Wrapper<Derived> (new Derived());
但與此錯誤結束:
Error CS0029 Cannot implicitly convert type 'Wrapper<Derived>' to 'Wrapper<Base>'
我試過創建方法Wrapper
class
將作爲轉換器
public Wrapper<TResult> To<TResult>() /* Constraints needed here. */ =>
new Wrapper<TResult> (Value);
但我錯過了一些有效的約束。當前代碼結束了錯誤:
S1503 Argument 1: cannot convert from 'T' to 'TResult'
我會想象在To
方法約束可能看起來像where T : TResult
,但這不是有效的約束。
任何方式實現轉換器從Wrapper<Derived>
到Wrapper<Base>
容易嗎?
您是否嘗試過'包裝 包裝=新的包裝 (新派生的());'? –
Eli
這會在你預先創建對象的情況下工作,但是在它看起來像這樣的情況下:'var wrapper = new Wrapper(new Derived());/*其他代碼/ */var newWrapper = wrapper;'不會。 –