まずは、誤植をお許しください。英語は母国語ではありません。C#4.0のおおよその値を比較していますか?
ここに私の質問です。私は、次のような近似値を表すクラスを作成しています:
public sealed class ApproximateValue
{
public double MaxValue { get; private set; }
public double MinValue { get; private set; }
public double Uncertainty { get; private set; }
public double Value { get; private set; }
public ApproximateValue(double value, double uncertainty)
{
if (uncertainty < 0) { throw new ArgumentOutOfRangeException("uncertainty", "Value must be postivie or equal to 0."); }
this.Value = value;
this.Uncertainty = uncertainty;
this.MaxValue = this.Value + this.Uncertainty;
this.MinValue = this.Value - this.Uncertainty;
}
}
私は= Xのように、不確実なmeasurmentsのために例えば8.31246 +/- 0.0045を、このクラスを使用すると、これらの値に対して計算を実行します。
このクラスの演算子をオーバーロードします。最後のケースでは、私は、しかし
public static bool? operator >(ApproximateValue a, ApproximateValue b)
{
if (a == null || b == null) { return null; }
if (a.MinValue > b.MaxValue) { return true; }
else if (a.MaxValue < b.MinValue) { return false; }
else { return null; }
}
:私は考え最初のものは、このようなものである...、>、> =を実装する方法を知っている< =と<演算子はありません正確な結果が「null」ではないため、この「null」には満足しません。それは '真実'かもしれないし、「偽」かもしれない。
.Net 4には、私が気付いていないこの機能の実装に役立つオブジェクトがありますか、それとも正しい方法ですか?私はまた、比較演算子を実装するのではなく、どのような状況で値が優れているかどうかを定義するブール値の代わりにオブジェクトを使用することを考えていましたが、達成しようとしているものに対しては少し複雑です。 。
比較の仕組みを指定していないため、比較を実装することはできません。そのような比較を支配するルールを書き留めます。このようなルールを思いつくのが難しい場合は、それ以上の文脈がなくても比較が意味をなさないというヒントです。 – Jon
@Guillaume:FYIと同様に、.NETでnull>がfalse、nullがヌルを意味するものを再定義するべきではありません。 –
なぜブール演算でnullを返そうとしていますか?あなたがApproximateValueをヌル可能な型にすることさえ許される理由は、私にはありません。 –