您可以一起添加两个(int)元组吗? thim的辛苦如下: var tuple1 =(x:2,y:4); var tuple2 =(x:0,y:-1); var tuple3 = tuple1 + tuple2; //所需的输出:( x:2,y:3) 有没有简单的方法,或者我必须做类似的事情: tuple3.x = tuple1.x +

问题描述 投票:0回答:3
有一种简单的方法,或者我必须做类似的事情:

Tuple3.x = Tuple1.x + Tuple2.x; Tuple3.y = Tuple1.y + Tuple2.y;
我还可以使用另一个结构而不是元组。

没有单线的任何额外工作:

var tuple1 = (x:2,y:4); var tuple2 = (x:0,y:-1); var tuple3 = (x: tuple1.x + tuple2.x, y: tuple1.y + tuple2.y);

其他选项是创建一个扩展方法
c# tuples
3个回答
6
投票
(此方法利用了其他两个功能-Ygenerics

genericMath
,后者可用于.NET 7):

public static class TupleExts { public static (TX X, TY Y) Add<TX, TY>(this (TX X, TY Y) left, (TX X, TY Y) right) where TX : IAdditionOperators<TX, TX, TX> where TY : IAdditionOperators<TY, TY, TY> => (left.X + right.X, left.Y + right.Y); }

和用法:
var tuple1 = (x:2,y:4);
var tuple2 = (x:0,y:-1);
var tuple3 = tuple1.Add(tuple2);

但是,由于您写道您没有将您的元组定义并超载

+
运算符。请参阅
操作器过载

文档。一开始:

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }

    public static Point operator +(Point left, Point right) => new Point
    {
        X = left.X + right.X,
        Y = left.Y + right.Y
    };
}

然后您将能够使用

+
运算符: var p = new Point { X = 2, Y = 4 } + new Point { X = 0, Y = -1 };


没有内置的本机内置。您将必须自己编写代码。

但是,如果需要,您可以以扩展方法隐藏代码:

public static (int, int) Add(this (int, int) t1, (int, int) t2) => (t1.Item1+t2.Item1, t1.Item2+t2.Item2);
then你可以

2
投票

显然这并不能很好地扩展以支持其他类型或长度的元素。

你做这个时间
吗?我真的无法提供任何可以“节省您打字”的东西。
但是,如果这是您要做的事情

Add()

测试使用控制台app


1
投票

在您的评论中,您说: 我只有几个月的时间

我预测,一旦您编写了第一个扩展方法,“您的生活将永远不会相同”。
    
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.