ジェネリック構造体と、ジェネリック型パラメーターが定義された 2 つのシノニムがあります。次のように、これら 2 つの型の間の型変換を定義したいと思います。
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) の間があいまい」。
- 「ユーザー定義の変換は、囲んでいる型との間で変換する必要があります」。
型を class に変更せずにこの型変換を実現する方法を知っている人はいますか?
更新:.NET 4 を使用しています。