0

2つの整数を持つ構造体(System.Drawing.Sizeなど)はありますか?C#コンソールアプリケーションを作成していて、この構造体を使用したいのですがSystem.Drawing、コンソールアプリケーションでは使用できないようです。

私自身を書く前に、別のそのような構造体が存在するかどうか疑問に思います。

4

3 に答える 3

2

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構造体の場合、(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;
}
于 2013-02-15T18:53:34.097 に答える