簡體   English   中英

C#模板化的結構:無法隱式轉換

[英]C# Templated Struct: Cannot implicitly convert

總而言之,我的問題是以下問題:

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#使我感到有些驚訝。 如果上述代碼給您帶來噩夢,也請您提前表示歉意。

您需要告訴編譯器如何將類型'vector2D <uint>'轉換為'vector2D <int>'

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)),
                };
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM