我正在使用TimeSpans并在MSDN中找到TimeSpan.MinValue。我想知道为什么他们直接在课堂上包含它,或者更好的是:如果有一个经典的例子说明为什么/什么时候你想要使用它。当然,知道这个价值是件好事,但是人们可以看一下。
我想到了减去其他TimeSpans的东西,但它对我来说并没有什么意义。
有什么想法吗?谢谢!
答案 0 :(得分:4)
想到一件事:
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;
}
答案 1 :(得分:1)
TimeSpan
是struct
,而不是class
。这意味着它不能具有空值(不将其包装在System.Nullable中)。因此,如果将变量实例化为TimeSpan
?
设计师选择了尽可能小的值,但不是将其编码为魔术值,而是将其公开为TimeSpan.MinValue
常量。
答案 2 :(得分:1)
我可以给你的一个例子是它可以用作某个类中Nullable
TimeSpan属性的替代方法(顺便说一句,TimeSpan
是Nullable)
你在某个地方展示了一些文字 - 这取决于某些东西是什么"设置" (或不)。
让我们说string
显示某些事情的运行时间。
使用完整属性(带有支持字段)来实现此目的:
将初始字段的值设置为TimeSpan.MinValue
,然后您可以使用公共属性进行更改。然后,对于要显示的字符串,使用您最喜欢的PropertyChanged事件处理程序(或其他代码)来更新您的视图:
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");
}
}
}
当您更新LengthOfTime
属性时,它会调用OnPropertyChanged
(或您用来更新用户界面的任何内容)到get
LengthOfTimeString
值,然后重新计算并显示在您的视图上。
这只是一个例子;你使用它的场景可能会有所不同。
我建议查看https://msdn.microsoft.com/en-us/library/ms229614(v=vs.100).aspx,它会告诉您如何实现INotifyPropertyChanged;如果您正考虑在WPF / XAML / WinRT中使用Bindings(如果您不知道如何使用)。