私は教育目的で単純な数学ライブラリに取り組んでおり、有理数struct
を表す aを実装しました。構造体のコア フィールドを示す非常に基本的なコードは次のとおりです。
public struct RationalNumber
{
private readonly long numerator;
private readonly long denominator;
private bool isDefinitelyCoprime;
private static RationalNumber zero = 0;
public RationalNumber(long numerator, long denominator)
{
this.numerator = numerator;
this.denominator = denominator;
this.isDefinitelyCoprime = false;
}
...
}
RationalMatrix
現在、おそらくご想像のとおり、RationalNumber
型付き要素で構成される を実装しています。
私が静的ビルダーを作成している便利なマトリックスは、Identity マトリックスです。コードは次のとおりです。
public static RationalMatrix GetIdentityMatrix(int dimension)
{
RationalNumber[,] values = new RationalNumber[dimension, dimension];
for (int i = 0; i < dimension; i++)
values[i, i] = 1;
return new RationalMatrix(values);
}
問題は、 my のデフォルト値がそうではなく、特別な種類の値 (不定形) であるため、これが機能しRationalNumber
ないことです。0/1
0/0
明らかに、1 つの解決策は簡単で、単純にメソッドを次のように変更することです。
public static RationalMatrix GetIdentityMatrix(int dimension)
{
RationalNumber[,] values = new RationalNumber[dimension, dimension];
for (int i = 0; i < dimension; i++)
for (int j = i+1 ; j < dimension; j++)
{
values[i, i] = 1;
values[i, j] = RationalNumber.Zero;
values[j, i] = RationalNumber.Zero;
}
return new RationalMatrix(values);
}
しかし、基本的に配列全体の値を2回初期化しているため、これはどういうわけか無駄に思えます。どういうわけかデフォルト値をRationalNumber
equalにする方がエレガントだと思います0/1
。RationalNumber が の場合、これは簡単に実行class
できますが、 の場合はそれを行う方法が思いつきませんstruct
。明らかな何かが欠けて 0/0
いますか、それともデフォルト値として持たないようにする方法はありませんか?
コードのパフォーマンスについてはまったく気にしていないことを指摘したいと思います (これがボトルネックになるとしたら、すでに目標をはるかに超えていることになります)。に任意のデフォルト値を課すことを可能にするいくつかの構造(私には知られていない)があるかどうか知りたいだけですstruct
。
編集:タイプミス
編集2:質問の範囲を広げる
struct
OK、私が取得している入力から、および私の限られたC#知識に基づく私自身の結論から、a に任意のデフォルト値を課す方法はないようです。
構造体がこのように動作しなければならない理由について、誰かが私に手がかりを与えることができますか? それは理由があるのでしょうか、それともデフォルト値を定義するオプションを指定することを誰も考えなかったためにこのように実装されたのでしょうか?