0

是否有一个结构(如System.Drawing.Size),它有两个整数?我正在编写一个 C# 控制台应用程序并想使用这个结构,但显然你不能System.Drawing在控制台应用程序中使用。

我想知道在编写我自己的结构之前是否存在另一个这样的结构。

4

3 回答 3

2

如果您需要一个具有两个整数的结构,您可以使用Tuple

var point = Tuple.Create( 0, 0);
int x = point.Item1;
int y = point.Item2;

话虽如此,您应该能够添加对的引用,System.Drawing.dll以允许您using System.Drawing;在控制台应用程序中使用。

于 2013-02-15T18:37:03.647 回答
2

谁说你不能System.Drawing在控制台应用程序中使用。我现在在调整图像大小的服务中使用它。只需添加引用,然后使用Size.

于 2013-02-15T18:41:58.193 回答
1

我发现使用元组的代码非常难以阅读。我认为如果某件事值得做,那就值得做好。

在 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;
}
于 2013-02-15T18:53:34.097 回答