只是想知道是否还有代表C#3.5中的以下代码:
public struct Foo<T> {
public Foo(T item) {
this.Item = item;
}
public T Item { get; set; }
public static explicit operator Foo<U> ( Foo<T> a )
where U : T {
return new Foo<U>((U)a.Item)
}
}
由于
答案 0 :(得分:20)
转换运算符不能是通用的。从规范部分10.10开始,这是convert-operator-declarator的格式:
conversion-operator-declarator: implicit operator type ( type identifier ) explicit operator type ( type identifier )
比较一下方法标题:
方法的头的: 属性 opt method-modifiers opt partial opt 返回型的 会员名称 type-parameter-list opt ( formal-parameter-list opt ) 型参数约束子句<子>选择子> 的
(抱歉格式化 - 不知道如何做得更好。)
请注意,运算符格式不包含类型参数列表或类型参数约束。
答案 1 :(得分:2)
您的代码归结为以下行:return new Foo<U>((U)a.Item)
您尝试将基类分配给继承的类,这是不可能的。
假设T(基类)的类型为Stream
而U的类型为MemoryStream
(继承的类),则不能将Stream
赋给MemoryStream
类型的变量1}}。
答案 2 :(得分:0)
我认为简短的回答是“不可能。尝试使用方法”
似乎也是这个问题的愚蠢 Solution for overloaded operator constraint in .NET generics