【发布时间】:2016-04-12 23:12:42
【问题描述】:
Resharper 建议我更改此代码:
if (getBeginDate)
{
return (DateTime)RptParamsFromDate;
}
...到这个:
if (getBeginDate)
{
if (RptParamsFromDate != null) return (DateTime)RptParamsFromDate;
}
...因为,“Possible 'System.InvalidOperationException'”但是当我接受建议的更改时,它没有编译,说,“并非所有代码路径都返回一个值” p>
“if”块有以下“else”:
else
{
int daysToAddToToDate = DateTime.DaysInMonth(RptParamsToDate.Value.Year, RptParamsToDate.Value.Month) - 1;
RptParamsToDate = RptParamsToDate.Value.AddDays(daysToAddToToDate);
return (DateTime)RptParamsToDate;
}
...所以我不知道为什么它没有看到“else”来确保返回一个值。
【问题讨论】:
-
您的两个
if块都需要一个else块,或者需要在它们外部有一个返回,以便您的所有代码路径都返回一个值,现在如果 @ 则没有结果987654326@ 为真,RptParamsFromDate为空。 -
那么,您的问题是为什么该代码会导致 InvalidOperationException,或者为什么在 Resharper “修复”它之后会出现构建错误?
-
您收到“可能的无效操作异常”警告,因为将
null转换为DateTime是不安全的。 -
"并非所有代码路径都返回值" Resharper 错误与
if (RptParamsFromDate != null) return (DateTime)RptParamsFromDate;相关联。基本上它强调当RptParamsFromDate是null时你没有设置返回值。 -
还有一个 else 块。必须有两个。正如我所说,如果
getBeginDate为真且RptParamsFromDate为空,则您没有返回路径。如果您包含一个完整的 sn-p 来演示您的问题,这将有助于说明这一点,作为一个代码块。
标签: c# resharper invalidoperationexception