【发布时间】:2014-06-27 15:45:55
【问题描述】:
我有一个像这样的struct(为简洁起见):
public struct Period
{
public DateTime? Start { get; private set; }
public DateTime? End { get; private set; }
public bool IsMoment
{
get { return this.Start.HasValue && this.Start == this.End; }
}
public Period(DateTime? start, DateTime? end) : this()
{
this.Start = start;
this.End = end;
}
public override string ToString()
{
return this.IsMoment
? this.Start.Value.ToString("g")
: string.Format("{0:g} – {1:g}", this.Start, this.End);
}
}
一切正常,但 ReSharper 在 this.Start.Value.ToString 上显示警告:
可能是'
System.InvalidOperationException'
如果我将IsMoment 属性的主体复制到条件中,警告就会消失,但我希望能够重用该属性。我可以通过评论禁用 ReSharper 警告(这是我目前所做的),或者通过将 ToString 更改为 string.Format,但我的代码中有一些其他类似的地方,它让我思考.我会尝试使用code contracts 来解决这个问题,但不幸的是,我对代码合同没有太多经验,我不确定它会是什么样子。
我是否使用代码协定向 ReSharper 表明如果 IsMoment 是 true,那么 Start 不是 null?
【问题讨论】:
标签: c# .net visual-studio-2012 resharper code-contracts