是否有一个结构(如System.Drawing.Size),它有两个整数?我正在编写一个 C# 控制台应用程序并想使用这个结构,但显然你不能System.Drawing
在控制台应用程序中使用。
我想知道在编写我自己的结构之前是否存在另一个这样的结构。
是否有一个结构(如System.Drawing.Size),它有两个整数?我正在编写一个 C# 控制台应用程序并想使用这个结构,但显然你不能System.Drawing
在控制台应用程序中使用。
我想知道在编写我自己的结构之前是否存在另一个这样的结构。
如果您需要一个具有两个整数的结构,您可以使用Tuple
var point = Tuple.Create( 0, 0);
int x = point.Item1;
int y = point.Item2;
话虽如此,您应该能够添加对的引用,System.Drawing.dll
以允许您using System.Drawing;
在控制台应用程序中使用。
谁说你不能System.Drawing
在控制台应用程序中使用。我现在在调整图像大小的服务中使用它。只需添加引用,然后使用Size
.
我发现使用元组的代码非常难以阅读。我认为如果某件事值得做,那就值得做好。
在 Point 结构的情况下,您需要使其不可变(不像微软的业余努力!)并实现价值风格的比较。像这样的东西:
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;
}