微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“使用范围运算符”建议修复产生无效代码

如何解决“使用范围运算符”建议修复产生无效代码

来自 .NET 4 的 ASP.NET 5 MVC 项目使用 Substring 是源代码,如

id = row.Categoryid?.Substring(0,1) == "$" ? row.Categoryid?.Substring(startIndex: 1) :
                                               row.Categoryid?.Substring(0)

Visual Studio 2019 质量检查员抛出消息

IDE0057 子串可以简化

起始索引:1

应用建议的修复后

使用范围运算符

代码重构为

id = row.Categoryid?.Substring(0,1) == "$" ? row.Categoryid?.Substring[1..] :
                                               row.Categoryid?.Substring(0)

抛出编译错误

错误 CS0021 无法将带有 [] 的索引应用于类型表达式 '方法组'

如何解决这个问题,以便重构创建正确的代码

解决方法

不考虑任何其他问题并解决手头的问题,您不能在 方法 上使用 range,例如 Substring 例如 {{1 }}

应该是:

Categoryid.Substring[1..]

或者将其推导出合乎逻辑的结论:

row.Categoryid?[1..] 

至于为什么建议这样做完全是另一个问题。这要么是 VS 错误,要么是 Resharper,具体取决于建议和实施的内容

注意:假设您只是想从字符串的开头删除一个 var id = row.Categoryid?[0] == '$' ? row.Categoryid?[1..] : row.Categoryid; ,并且永远只有一个(或者如果有多个,您也希望将它们删除)。您可以使用 TrimStart 为自己节省一堆可打印字符

从当前字符串中删除所有指定字符的前导匹配项。

$

更新

所以进一步分析,这是一个与 Null-conditional operator 相关的错误。当它被移除时,id = row.Categoryid?.TrimStart('$'); 会正确替换 row.Categoryid.Substring(1)

更新

进一步更新,这似乎是一个已知的错误,并且已经有一个针对此问题的拉取请求,该问题计划发布于 row.Categoryid[1..]

Fix "IDE0057: Invalid code fix with string.Substring and null-conditional operator" #47377

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。