System.Drawing.Size等效于控制台应用程序

时间:2013-02-15 18:35:09

标签: c# .net console-application

是否有一个结构(如 System.Drawing.Size ),它有两个整数? 我正在编写一个C#控制台应用程序,并希望使用此结构,但显然您无法在控制台应用程序中使用System.Drawing

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

3 个答案:

答案 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;
}