Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何重载运算符#x2B;通用级 公共结构向量3 { 私有tx{get;set;} 私有T Y{get;set;} 私有tz{get;set;} 公共向量3(tx,tyz):this() { 这个.X=X; 这个。Y=Y; 这个。Z=Z; } 公共静态Vector3运算符+(Vector3 v1,Vector3 v2) { 返回新向量3(v1.X+v2.X,v1.Y+v2.Y,v1.Z+v2.Z); } }_C#_Overloading_Operator Keyword - Fatal编程技术网

C#如何重载运算符#x2B;通用级 公共结构向量3 { 私有tx{get;set;} 私有T Y{get;set;} 私有tz{get;set;} 公共向量3(tx,tyz):this() { 这个.X=X; 这个。Y=Y; 这个。Z=Z; } 公共静态Vector3运算符+(Vector3 v1,Vector3 v2) { 返回新向量3(v1.X+v2.X,v1.Y+v2.Y,v1.Z+v2.Z); } }

C#如何重载运算符#x2B;通用级 公共结构向量3 { 私有tx{get;set;} 私有T Y{get;set;} 私有tz{get;set;} 公共向量3(tx,tyz):this() { 这个.X=X; 这个。Y=Y; 这个。Z=Z; } 公共静态Vector3运算符+(Vector3 v1,Vector3 v2) { 返回新向量3(v1.X+v2.X,v1.Y+v2.Y,v1.Z+v2.Z); } },c#,overloading,operator-keyword,C#,Overloading,Operator Keyword,给出错误:无法将运算符“+”应用于类型为“T”和“T”的oparands 请帮助解决此问题。您可以通过将类的模板私有成员更改为动态类型来克服这一限制,风险自负。 例如: 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(

给出错误:无法将运算符“+”应用于类型为“T”和“T”的oparands


请帮助解决此问题。

您可以通过将类的模板私有成员更改为
动态
类型来克服这一限制,风险自负。
例如:

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);
    }
}
公共结构向量3
{
私有动态X{get;set;}
私有动态Y{get;set;}
私有动态Z{get;set;}
...
....
}

不幸的是,在
C#
中,没有办法将模板参数限制为数值(我想这是您试图实现的)。

如果您在Google中键入错误消息,我相信您会找到很多答案。看看您要求它做什么:构造一个可以应用于任何类型的通用方法。整数、字符串、GUID、System.Net.WebClient、匿名类、System.Reflection.AmbiguousMatchException。。。。任何课程都可以。这是不可能的。您需要将T限制为某个子集接口,以便编译器知道它实现了+运算符。这里有很多好的信息(也不包括Tigran提出的
动态
建议)。例如,是否可能有一个额外的重载来连接两个数组?a={1,2}b={3,4}。那么c=a+b
public struct Vector3<T>
{
    private dynamic X { get; set; }
    private dynamic Y { get; set; }
    private dynamic Z { get; set; }
    ...
    ....
}