不正确的 Resharper 建议 - "Merge Conditional Expression"
Incorrect Resharper Suggestion - "Merge Conditional Expression"
给定一个返回单个字符串值的 oracle 查询,要从查询中获取值,我使用以下两行:
var result = cmd.ExecuteOracleScalar();
return result != null ? ((OracleString)result).Value : null;
此语句中的“!= null”是下划线,建议"Merge Conditional Expression"。如果我接受建议,它将更改为:
return ((OracleString)result).Value;
这会引发异常,因为对于多次执行,返回的值将为 null。
有没有使用三元运算符却没有这个警告的方法?
请注意,如果我将代码更改为:
var result = cmd.ExecuteOracleScalar();
if (result == null)
return null;
return ((OracleString)result).Value;
Resharper 然后首先建议我 "Convert to Return Statement" 这只是将它改回使用三元运算符。
有什么建议吗?
这看起来与 RSRP-434610 中确定的错误完全一样:
- 给定的原始代码检查对象引用是否为空,如果对象引用不为空则访问对象的 属性
- R# 提议 始终 访问 属性 的重构,因此当对象引用为 null
时将失败
这个问题有一个修复版本 9.1,几天前才发布,虽然 watch out trying to upgrade from within VS.
给定一个返回单个字符串值的 oracle 查询,要从查询中获取值,我使用以下两行:
var result = cmd.ExecuteOracleScalar();
return result != null ? ((OracleString)result).Value : null;
此语句中的“!= null”是下划线,建议"Merge Conditional Expression"。如果我接受建议,它将更改为:
return ((OracleString)result).Value;
这会引发异常,因为对于多次执行,返回的值将为 null。
有没有使用三元运算符却没有这个警告的方法?
请注意,如果我将代码更改为:
var result = cmd.ExecuteOracleScalar();
if (result == null)
return null;
return ((OracleString)result).Value;
Resharper 然后首先建议我 "Convert to Return Statement" 这只是将它改回使用三元运算符。
有什么建议吗?
这看起来与 RSRP-434610 中确定的错误完全一样:
- 给定的原始代码检查对象引用是否为空,如果对象引用不为空则访问对象的 属性
- R# 提议 始终 访问 属性 的重构,因此当对象引用为 null 时将失败
这个问题有一个修复版本 9.1,几天前才发布,虽然 watch out trying to upgrade from within VS.