如何实现泛型结构的非泛型同义词的显式和隐式类型转换 (generic synonyms)

我有一个泛型结构和两个同义词与定义的泛型类型参数。

我有一个泛型结构和两个同义词与定义的泛型类型参数。

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。

1

错误

用户定义的转换必须转换为封闭类型或从封闭类型转换。

意味着您的转换运算符需要转换为 / fromA<T>。您的正在转换为 / fromA<int/string>。这不是一回事 (至少更少一般)。

所以这不能工作。你必须找到一些其他的方式来做转换。也许运行时铸造可以帮助这里(定义操作符为作用于A<T>并在其中进行铸造)。

我认为这个问题与类型同义词无关。事实上,他们使这个问题更难理解。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(437)
为什么 gunicorn_django不再推荐
上一篇
流浪者:Opentable/win-2012r2-standard-amd64-nocm似乎不适用于客人添加。
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(39条)