2つの整数を持つ構造体(System.Drawing.Sizeなど)はありますか?C#コンソールアプリケーションを作成していて、この構造体を使用したいのですがSystem.Drawing
、コンソールアプリケーションでは使用できないようです。
私自身を書く前に、別のそのような構造体が存在するかどうか疑問に思います。
2つの整数を持つ構造体(System.Drawing.Sizeなど)はありますか?C#コンソールアプリケーションを作成していて、この構造体を使用したいのですがSystem.Drawing
、コンソールアプリケーションでは使用できないようです。
私自身を書く前に、別のそのような構造体が存在するかどうか疑問に思います。
2つの整数を持つ構造体が必要な場合は、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構造体の場合、(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;
}