我有一个泛型结构和两个定义泛型类型参数的同义词。我想像这样定义这两种类型之间的类型转换:
using X = A<int>;
using Y = A<long>;
struct A<T>
{
private T data;
public A(T data)
{
this.data = data;
}
public static explicit operator X(Y value)
{
return new X((int)value.data);
}
public static implicit operator Y(X value)
{
return new Y(value.data);
}
}
这是我想如何使用结构的示例:
class Program
{
static void Main(string[] args)
{
X x = new X(1);
Y y = new Y(2);
x = (X)y; // explicit cast with precision loss
y = x; // implicit cast without precision loss
}
}
不幸的是,每个“使用”都会创建结构的新特定定义,C# 编译器不会将同义词结构视为通用结构的子集,而是将其视为单独的结构。这就是编译器报告错误的原因:
- “X.static 隐式运算符 Y(X) 和 Y.static 隐式运算符 Y(X) 之间存在歧义”。
- “用户定义的转换必须转换为封闭类型或从封闭类型转换”。
有谁知道在不将类型更改为类的情况下实现这种类型转换的方法?
更新:我正在使用 .NET 4。