如何减少C#中不同类型上类似函数的重复代码
我有两个函数,它们做的基本相同,但一个是基于浮点的版本,另一个是基于int的版本。我不得不写两次,这让我发疯。有没有一种聪明的方法来设计我的代码,以避免在C#中出现这种情况,我在这两种类型中添加的函数越多,它们本质上具有相同的行为,这就变得越乏味如何减少C#中不同类型上类似函数的重复代码,c#,C#,我有两个函数,它们做的基本相同,但一个是基于浮点的版本,另一个是基于int的版本。我不得不写两次,这让我发疯。有没有一种聪明的方法来设计我的代码,以避免在C#中出现这种情况,我在这两种类型中添加的函数越多,它们本质上具有相同的行为,这就变得越乏味 public static Span2D operator +(Span2D A, Span2D B) { float minX = A.MinX < B.MinX ? A.MinX : B.MinX;
public static Span2D operator +(Span2D A, Span2D B)
{
float minX = A.MinX < B.MinX ? A.MinX : B.MinX;
float minY = A.MinY < B.MinY ? A.MinY : B.MinY;
float maxX = A.MaxX > B.MaxX ? A.MaxX : B.MaxX;
float maxY = A.MaxY > B.MaxY ? A.MaxY : B.MaxY;
return new Span2D(minX,minY,maxX,maxY);
}
public static Span2DInt operator +(Span2DInt A, Span2DInt B)
{
int minX = A.MinX < B.MinX ? A.MinX : B.MinX;
int minY = A.MinY < B.MinY ? A.MinY : B.MinY;
int maxX = A.MaxX > B.MaxX ? A.MaxX : B.MaxX;
int maxY = A.MaxY > B.MaxY ? A.MaxY : B.MaxY;
return new Span2DInt(minX, minY, maxX, maxY);
}
公共静态Span2D运算符+(Span2D A、Span2D B)
{
float minX=A.minXB.maxX?A.maxX:B.maxX;
float maxY=A.maxY>B.maxY?A.maxY:B.maxY;
返回新的Span2D(minX、minY、maxX、maxY);
}
公共静态span2dit运算符+(span2dit A、span2dit B)
{
int minX=A.minXB.maxX?A.maxX:B.maxX;
int maxY=A.maxY>B.maxY?A.maxY:B.maxY;
返回新的Span2DInt(minX,minY,maxX,maxY);
}
顺便说一句,Span2D和Span2DInt都是结构体。使用泛型:
struct Span2D<Type: IComparable> {
Type MinX { get; };
Type MaxX { get; };
...
}
public Span2D<Type> operator+(Span2D<Type> A, Span2D<Type> B) {
Type minX = A.MinX < B.MinX ? A.MinX : B.MinX; // as normal...
}
struct Span2D{
输入MinX{get;};
键入MaxX{get;};
...
}
公共Span2D运算符+(Span2D A、Span2D B){
键入minX=A.minX
泛型是否需要IComparable?是的,这样您就可以比较>/但您并没有尝试使用IComparable
,您正在尝试使用如果有人使用字符串类型,会发生什么情况-这不会破坏+运算符,因为返回字符串没有意义吗?为什么要删除float
s的舍入问题?@Enigmativity更多关于它的信息现在在这里:您可以编辑您的问题,如果可以将其设置为原始问题,而不是重复问题。但您没有足够的信息来确定实际问题是什么-因此它是重复的。你需要更全面地充实你的问题,这样我们才能给你一个切实可行的答案。增加的问题是代码没有错,所以它不属于你,所以无论如何,这是一个工程问题,欢迎你对我链接的问题给出你的见解。