2016-05-05 11 views
0

私はTimeSpansを使用していて、MSDNで約TimeSpan.MinValueが見つかりました。私はなぜそれがクラスに直接含まれているのだろうと思っていましたか、それとももっと良いのでしょうか?それを使用したい理由/時代の古典的な例があれば。もちろんを知っているのはいいですを知っていますが、それを見ることができます。TimeSpan.MinValueの使用例?誰が実際にそれを使うのですか?

私は他のTimeSpansを減算するようなものを考えましたが、実際には私には意味がありません。

アイデア?ありがとう!!頭に浮かぶ

+1

2ワード:コードの可読性。 – glenebob

+0

なぜタイムスパンを引いても意味がないのですか? 10分間マイナス7分は3分です。それらはすべての時間範囲です。 –

+0

@EricLippertはtimespansを減算するのではなく、minvalueからtimespanを減算します。 – Gaspa79

答えて

2

一つのこと:

static TimeSpan FindMax(params TimeSpan[] intervals) { 
    if (intervals.Length == 0) 
     throw new ArgumentException("intervals collection is empty"); 
    var max = TimeSpan.MinValue; 
    foreach (var interval in intervals) { 
     if (interval > max) 
      max = interval; 
    } 
    return max; 
} 
+0

良い例+1 –

+1

'var max = intervals [0]'はイニシャライザと同様に動作します。 – Brian

0

TimeSpanstruct、ないclassです。つまり、ヌル値を持つことはできません(System.Nullableにラップすることなく)。したがって、変数をTimeSpanとしてインスタンス化する場合、どのような値を指定する必要がありますか?

デザイナーは可能な限り最小値を選択しましたが、これを魔方陣の値としてエンコードするのではなく、TimeSpan.MinValue定数として公開しています。それはクラスのNullableのTimeSpanプロパティの代替として使用することができどこ私はあなたを与えることができ

+5

この回答は間違っています。あなたはMinValueとZeroを混同しています。 –

+0

'struct'は' const'として宣言できません。 ['TimeSpan.MinValue'](https://msdn.microsoft.com/en-us/library/system。timespan.minvalue(v = vs.110).aspx)は 'static readonly'です。 – Xiaoy312

+0

値は選択によるものではなく、設計によるものです。このフィールドの値は、Int64.MinValue(負の9,223,372,036,854,775,808)のティックに相当します。そして、それはあなたが 'int64'をアンダーフローさせることなく、保存することができる最大値です(または最小限にする必要があります)。 – Xiaoy312

1

一例は、(TimeSpanを経由して、NULL可能である)

そして、あなたはどこかにいくつかのテキストを表示している - こと何かが "セット"されているかどうかに依存しています。

たとえば、何かが実行されている時間を示すstringとしましょう。これを達成するための

使用(バッキングフィールドを持つ)完全なプロパティ:あなたは、その後変更するパブリックプロパティを使用することができますTimeSpan.MinValueに初期フィールドの値を設定し

。その後、表示したい文字列を、あなたのビューを更新するためにあなたの好きなPropertyChangedイベントハンドラ(または他のコード)を使用する:あなたは、あなたのLengthOfTimeプロパティを更新すると

private TimeSpan _lengthOfTime = TimeSpan.MinValue; 
public TimeSpan LengthOfTime 
{ 
    get { return _lengthOfTime; } 
    set 
    { 
     _lengthOfTime = value; 
     OnPropertyChanged("LengthOfTimeString"); 
    } 
} 

public string LengthOfTimeString 
{ 
    get 
    { 
     if (LengthOfTime == TimeSpan.MinValue) 
     { 
      return "The length of time has not been set."; 
     } 
     else 
     { 
      return LengthOfTime.ToString("YourFavouriteStringFormatHere"); 
     } 
    } 
} 

、それはOnPropertyChangedを呼び出します(またはあなたが使用してどのようなUIを更新する)getLengthOfTimeStringの値を再計算し、ビューに表示します。

これは一例です。それを使用するためのシナリオが異なる可能性があります。

私はhttps://msdn.microsoft.com/en-us/library/ms229614(v=vs.100).aspxを見ることをお勧めします。これは、INotifyPropertyChangedの実装方法を示しています。 WPF/XAML/WinRTでBindingsを使用することを考えている場合(既にわかっていない場合)

+2

この使用法は一般的ですが、悪い習慣です。何かが設定されていないことを示す場合は、* null値のtimespan *を作成し、それをnullに設定します。 –

+0

私は同意します。可能であれば、 'Nullable'' TimeSpan'プロパティを作成します。しかし、最初の質問は、「TimeSpan.MinValue」がどのようなものに使用できるかの例でした。 –

関連する問題