私の目標:IDとメッセージの両方を持つ事前定義されたエラーのC#クラスを作成します。これが私が試したことです:
public class MyError
{
public static readonly MyError OK = new MyError(0, "OK");
public static readonly MyError Bad = new MyError(1, "Bad Stuff");
public MyError(int id, string message)
{
this.Id = id;
this.Message = message;
}
public readonly int Id;
public readonly string Message;
}
これは問題なくコンパイルされ、実際には問題なく機能すると確信しています。しかし、私は常にコード分析のガイドラインに従うのが好きです。上記の場合、CA2104は「読み取り専用の可変参照型を宣言しない」に違反しています。
読み取り専用の代わりにconstを試す(コンパイルすらしない)など、上記以外の多くのことを試しました。{get; プライベートセット; }メンバーアクセス、クラスの代わりに構造体など。
可変タイプはどれですか?IDまたはメッセージ?
私が望むことを達成するための提案を受け入れます。重要なデータ型の事前定義された定数。
もちろん、私はいつでも警告を無視することができますが、通常はそれらの理由があることがわかりました。
*明確化* 私の質問は、この特定のMyErrorクラスについてではなく、基本的なデータ型以外のものの定数を定義するというより基本的な問題についてです。
doubleである3つの定数を定義したいとします。C#では次のようにできます。
public const double HighValue = 11.0;
public const double LowValue = 0.1;
public const double MidValue = 5.5;
C#は、事前定義されたdoubleの便利な定数をいくつか作成します: NaN、MinValue、MaxValue、NegativeInfinity、PositiveInfinity。
では、空間内の3次元ベクトル(X、Y、Z)の興味深い定数を事前に定義したい場合はどうすればよいでしょうか。double、integer、stringsなどの定数を定義できますが、些細なことではないものの定数を定義するにはどうすればよいですか?Originは、私が名前を付けたい興味深い定数です。
public class Vector3D
{
/// The problem is that this does not work
public const Vector3D Origin = { 0.0, 0.0, 0.0 };
public double X;
public double Y;
public double Z;
}
何千もの定数は必要ありません。私たちの友人のダブルがNaNなどで持っているようなほんの数例です。クラスは特に保護されたり封印されたりする必要はありません。誰でも自由にVector3Dオブジェクトを作成し、好きな方法でそこから派生させることができます。値(0.0、0.0、0.0)を持つOriginという名前の特別な定数が欲しいだけです