TimeSpan.MinValue 的使用示例?为什么有人会在实践中使用它?
Example use of TimeSpan.MinValue? Why would anyone use that in practice?
我正在使用 TimeSpans,并在 MSDN 中找到了 TimeSpan.MinValue。我想知道为什么他们将其直接包含在 class 中,或者更好:如果有 why/when 的 classic 示例,您会想要使用它。 知道值当然很好,但可以查一下。
我想到了减去其他 TimeSpans 之类的东西,但它对我来说真的没有意义。
有什么想法吗?谢谢!!
想到一件事:
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;
}
TimeSpan
是 struct
,不是 class
。这意味着它不能有空值(不将其包装在 System.Nullable 中)。因此,如果将变量实例化为TimeSpan
,应该给它什么值?
设计者选择了可能的最小值,但他们没有将其编码为魔法值,而是将其公开为 TimeSpan.MinValue
常量。
我可以给你的一个例子是,它可以用作 class 中 Nullable
TimeSpan 属性 的替代方法(TimeSpan
可以为空,通过方式)
并且您在某处显示一些文本 - 这取决于某些东西是 "set"(或不是)。
假设一个 string
显示某事已经持续了多长时间 运行。
使用完整的 属性(带支持字段)来实现:
将初始字段的值设置为 TimeSpan.MinValue
,然后您可以使用 public 属性 进行更改。然后,对于您要显示的字符串,使用您最喜欢的 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
(或您用来更新 UI 的任何内容)到 get
LengthOfTimeString
值,然后重新计算并显示在您的视图中。
这只是一个例子;以及您使用它的场景可能会有所不同。
我建议查看 https://msdn.microsoft.com/en-us/library/ms229614(v=vs.100).aspx,它告诉您如何实现 INotifyPropertyChanged;如果您正在考虑在 WPF/XAML/WinRT 中使用绑定(如果您还不知道如何使用)。
我正在使用 TimeSpans,并在 MSDN 中找到了 TimeSpan.MinValue。我想知道为什么他们将其直接包含在 class 中,或者更好:如果有 why/when 的 classic 示例,您会想要使用它。 知道值当然很好,但可以查一下。
我想到了减去其他 TimeSpans 之类的东西,但它对我来说真的没有意义。
有什么想法吗?谢谢!!
想到一件事:
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;
}
TimeSpan
是 struct
,不是 class
。这意味着它不能有空值(不将其包装在 System.Nullable 中)。因此,如果将变量实例化为TimeSpan
,应该给它什么值?
设计者选择了可能的最小值,但他们没有将其编码为魔法值,而是将其公开为 TimeSpan.MinValue
常量。
我可以给你的一个例子是,它可以用作 class 中 Nullable
TimeSpan 属性 的替代方法(TimeSpan
可以为空,通过方式)
并且您在某处显示一些文本 - 这取决于某些东西是 "set"(或不是)。
假设一个 string
显示某事已经持续了多长时间 运行。
使用完整的 属性(带支持字段)来实现:
将初始字段的值设置为 TimeSpan.MinValue
,然后您可以使用 public 属性 进行更改。然后,对于您要显示的字符串,使用您最喜欢的 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
(或您用来更新 UI 的任何内容)到 get
LengthOfTimeString
值,然后重新计算并显示在您的视图中。
这只是一个例子;以及您使用它的场景可能会有所不同。
我建议查看 https://msdn.microsoft.com/en-us/library/ms229614(v=vs.100).aspx,它告诉您如何实现 INotifyPropertyChanged;如果您正在考虑在 WPF/XAML/WinRT 中使用绑定(如果您还不知道如何使用)。