我有这样的代码:转换包装<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;'不会。 –