C#模板化结构:无法隐式转换

C#模板化结构:无法隐式转换,c#,compiler-errors,type-conversion,operator-overloading,C#,Compiler Errors,Type Conversion,Operator Overloading,晚上好,我的问题是: 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 (((dynami

晚上好,我的问题是:

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);
    }
}
公共结构向量2d
{
公共T1 Mw;
公共T1 m_h;
//删除不相关的内容(构造函数、其他重载)
公共静态布尔运算符!=(向量2d src,T1 dest)
{
返回((动态)src.m_w!=(动态)dest);(动态)src.m_h!=(动态)dest));
}
公共静态布尔运算符==(向量2d src,T1 dest)
{
返回((动态)src.m_w!=(动态)dest);(动态)src.m_h!=(动态)dest));
}
公共静态布尔运算符!=(vector2D src,vector2D dest)
{
返回(((动态)src.m_w!=(动态)dest.m_w)| |((动态)src.m_h!=(动态)dest.m_h));
}
公共静态布尔运算符==(vector2D src,vector2D dest)
{
返回等于(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>'
错误1运算符“!=”无法应用于“vector2D”和“vector2D”类型的操作数
错误2无法将类型“vector2D”隐式转换为“vector2D”
现在我知道编译器不知道如何使用以下代码片段“强制转换”:

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];
vector2D[]Something=newvector2d[2];//假装它有价值。。。
听写的另一件事=新的听写的();//假装它有价值。。。
如果(另一个[0]!=Something[0]){…}
另一件事[0]=某件事[0];
我试过几种方法,它们要么给我更多的错误,要么不起作用,要么不起作用。所以,我的问题是,我将如何开始“铸造”


也可能是好的,我通常用C++编程,所以C已经让我吃惊了几次。如果上面的代码让您做噩梦,请提前向您道歉。

您需要告诉编译器如何将“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)),
                };
        }
公共静态隐式运算符vector2D(vector2D src)
{
返回新矢量2D
{
m_h=(T1)Convert.ChangeType(src.m_h,typeof(T1)),
m_w=(T1)Convert.ChangeType(src.m_w,typeof(T1)),
};
}

谢谢你,它很有魅力。我尝试过类似的方法,但没有成功,我明白为什么没有成功,无论如何,再次感谢你。