【问题标题】:C# Templated Struct: Cannot implicitly convertC# 模板结构:无法隐式转换
【发布时间】:2014-12-05 02:47:38
【问题描述】:

晚安,我的问题在于以下几点:

public struct vector2D<T1>
{
    public T1 m_w;
    public T1 m_h;

    // Irrelevant stuff removed (constructor, other overloader's)

    public static bool operator !=(vector2D<T1> src, T1 dest)
    {
        return (((dynamic)src.m_w != (dynamic)dest) || ((dynamic)src.m_h != (dynamic)dest));
    }

    public static bool operator ==(vector2D<T1> src, T1 dest)
    {
        return (((dynamic)src.m_w != (dynamic)dest) || ((dynamic)src.m_h != (dynamic)dest));
    }

    public static bool operator !=(vector2D<T1> src, vector2D<T1> dest)
    {
        return (((dynamic)src.m_w != (dynamic)dest.m_w) || ((dynamic)src.m_h != (dynamic)dest.m_h));
    }

    public static bool operator ==(vector2D<T1> src, vector2D<T1> dest)
    {
        return Equals(src, dest);
    }
}

现在我得到的错误是:

Error   1   Operator '!=' cannot be applied to operands of type 'vector2D<int>' and 'vector2D<uint>'
Error   2   Cannot implicitly convert type 'vector2D<uint>' to 'vector2D<int>'

现在我知道编译器不知道如何使用以下代码片段“强制转换”:

vector2D<uint>[] Something = new vector2D<uint>[2]; // Pretend it has values...
Dictonary<uint, vector2D<int>> AnotherThing = new Dictonary<uint, vector2D<int>>(); // Pretend it has values...

if (AnotherThing[0] != Something[0] ) { ... }

AnotherThing[0] = Something[0];

我尝试了几件事,但它们要么给我更多错误,要么不工作,要么不工作。所以我的问题是我将如何进行“铸造”?

另外值得一提的是,我通常用 C++ 编程,所以 C# 让我惊讶了好几次。如果上面的代码让你做噩梦,也提前抱歉。

【问题讨论】:

    标签: c# compiler-errors type-conversion operator-overloading


    【解决方案1】:

    您需要告诉编译器如何将类型 'vector2D' 转换为 'vector2D'

    public static implicit operator vector2D<T1>(vector2D<uint> src)
            {
                return new vector2D<T1>
                    {
                        m_h = (T1)Convert.ChangeType(src.m_h, typeof(T1)),
                        m_w = (T1)Convert.ChangeType(src.m_w, typeof(T1)),
                    };
            }
    

    【讨论】:

    • 谢谢你,就像一个魅力。我尝试了类似的方法,但没有成功,我知道为什么没有成功,再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多