2015-04-03 62 views
0
public struct Vector3<T> 
{ 
    private T X { get; set; } 
    private T Y { get; set; } 
    private T Z { get; set; } 

    public Vector3(T x, T y, T z) : this() 
    { 
     this.X = x; 
     this.Y = y; 
     this.Z = z; 
    } 

    public static Vector3<T> operator +(Vector3<T> v1, Vector3<T> v2) 
    { 
     return new Vector3<int>(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z); 
    } 
} 

給出錯誤:無法將運算符'+'應用於類型爲'T'和'T'的視角。C#如何爲通用類重載operator +

請幫忙解決。

+0

我相信如果您在Google中輸入錯誤消息,您會發現很多答案。 – 2015-04-03 21:28:40

+1

看看你要做的事:構建一個可以將+應用於任何類型的泛型方法。整數,字符串,GUIDs,System.Net.WebClient,匿名類,System.Reflection.AmbiguousMatchException ....任何類都是什麼。這是不可能的。您需要將T限制爲某個子集接口,以便編譯器知道它實現了+運算符。 – 2015-04-03 21:31:33

+0

這裏有很多很好的信息http://stackoverflow.com/questions/32664/is-there-a-constraint-that-restricts-my-generic-method-to-numeric-types(也不包括'dynamic' Tigran的建議)。 – 2015-04-03 22:39:45

回答

2

通過將類的模板化私有成員更改爲dynamic類型,您可以克服自身風險的侷限性。 例子:

public struct Vector3<T> 
{ 
    private dynamic X { get; set; } 
    private dynamic Y { get; set; } 
    private dynamic Z { get; set; } 
    ... 
    .... 
} 

沒有辦法,遺憾的是,在C#限制模板參數的數值(我想這是你想要達到的目的)。

+0

是否有可能例如有一個加入超負荷加入兩個陣列? a = {1,2} b = {3,4}。然後c = a + b – 2016-01-04 09:37:36