Resharper建议我更改此代码:
if (getBeginDate)
{
return (DateTime)RptParamsFromDate;
}
......对此:
if (getBeginDate)
{
if (RptParamsFromDate != null) return (DateTime)RptParamsFromDate;
}
...因为," 可能' System.InvalidOperationException' "但当我接受建议的更改时,它不会编译,说,"并非所有代码路径都返回值"
" if" block有以下" else":
else
{
int daysToAddToToDate = DateTime.DaysInMonth(RptParamsToDate.Value.Year, RptParamsToDate.Value.Month) - 1;
RptParamsToDate = RptParamsToDate.Value.AddDays(daysToAddToToDate);
return (DateTime)RptParamsToDate;
}
...所以我不知道为什么它没有看到"否则"确保返回一个值。
答案 0 :(得分:3)
你得到的原因"并非所有代码路径都返回一个值"是因为if语句。 如果语句为false,则只有一个if语句返回路径。您需要使两个语句返回值
示例:
if (getBeginDate)
{
if (RptParamsFromDate != null)
return (DateTime)RptParamsFromDate;
else
{
int daysToAddToToDate = DateTime.DaysInMonth(RptParamsToDate.Value.Year, RptParamsToDate.Value.Month) - 1;
RptParamsToDate = RptParamsToDate.Value.AddDays(daysToAddToToDate);
return (DateTime)RptParamsToDate;
}
}
else { return null; }
答案 1 :(得分:2)
好的,所以可以使用以下内容复制您的问题:
void Main()
{
DoSomething();
}
DateTime? MaybeGetDate()
{
return null;
}
DateTime DoSomething()
{
DateTime? test = MaybeGetDate();
return (DateTime)test;
}
我不确定RptParamsFromDate
的类型,但它是Nullable<DateTime>
或引用类型。换句话说,关于可能的无效操作异常的警告是因为您可能正在尝试将null
投射到DateTime
,这是不可能的。
现在,Resharper有点困惑,因为它的默认&#39;修复&#39;只是检查null。但是你最终得到了这个:
DateTime DoSomething()
{
DateTime? test = MaybeGetDate();
if (test != null)
return (DateTime)test;
}
这应该清楚为什么它不编译 - 如果test
为空,该方法不会返回任何。因此,在这种情况下,您需要手动返回合适的DateTime
。这是Resharper无法或不会帮助的东西。在这种情况下,DateTime.MinValue
可能是合适的候选人。
答案 2 :(得分:1)
&#34; else&#34; 不确保在您的示例中返回一个值。
方法体:
if (getBeginDate)
{
if (RptParamsFromDate != null) return (DateTime) RptParamsFromDate;
}
else
{
int daysToAddToToDate = DateTime.DaysInMonth(RptParamsToDate.Value.Year, RptParamsToDate.Value.Month) - 1;
RptParamsToDate = RptParamsToDate.Value.AddDays(daysToAddToToDate);
return (DateTime)RptParamsToDate;
}
<{1}}为真且<{1}}为空时,将不返回任何内容。
在方法体的末尾返回默认值可以解决此问题:
getBeginDate