是否有一个结构(如 System.Drawing.Size ),它有两个整数?
我正在编写一个C#控制台应用程序,并希望使用此结构,但显然您无法在控制台应用程序中使用System.Drawing
。
我想知道在编写自己的结构之前是否存在另一个这样的结构。
答案 0 :(得分:2)
如果你需要一个有两个整数的结构,你可以使用Tuple
var point = Tuple.Create( 0, 0);
int x = point.Item1;
int y = point.Item2;
尽管如此,您应该可以添加对System.Drawing.dll
的引用,以便您在控制台应用程序中使用using System.Drawing;
。
答案 1 :(得分:2)
谁说您无法在控制台应用程序中使用System.Drawing
。我现在正在使用它来调整图像大小。只需添加引用,然后使用Size
。
答案 2 :(得分:1)
我发现使用元组的代码非常难以理解。我认为如果值得做的事情,那值得做得很好。
对于Point结构,您需要使其不可变(与Microsoft的业余工作不同!)并实现值式比较。像这样:
public struct Point2D: IEquatable<Point2D>
{
public Point2D(int x, int y)
{
_x = x;
_y = y;
}
public int X
{
get { return _x; }
}
public int Y
{
get { return _y; }
}
public bool Equals(Point2D other)
{
return _x == other._x && _y == other._x;
}
public override int GetHashCode()
{
return _x.GetHashCode() ^ _y.GetHashCode();
}
public override bool Equals(object obj)
{
if (!(obj is Point2D))
{
return false;
}
return Equals((Point2D)obj);
}
public static bool operator==(Point2D point1, Point2D point2)
{
return point1.Equals(point2);
}
public static bool operator !=(Point2D point1, Point2D point2)
{
return !point1.Equals(point2);
}
public override string ToString()
{
return string.Format("({0}, {1})", _x, _y);
}
private readonly int _x;
private readonly int _y;
}