c# - “使用范围运算符”建议的修复会产生无效代码
问题描述
来自 .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 无法将带有 [] 的索引应用于“方法组”类型的表达式
如何解决这个问题,以便重构创建正确的代码?
解决方案
忽略任何其他问题并解决手头的问题,您不能在诸如Eg之类的方法上使用范围Substring
Categoryid.Substring[1..]
它需要是:
row.Categoryid?[1..]
或者将其得出合乎逻辑的结论:
var id = row.Categoryid?[0] == '$' ? row.Categoryid?[1..] : row.Categoryid;
至于为什么提出这个建议完全是另一个问题。它可能是 VS 错误,也可能是 Resharper,具体取决于建议和实现的内容
注意:假设您只是想$
从字符串的开头删除一个,并且永远只有一个(或者如果有多个,您也希望将它们删除)。您可以使用TrimStart
.
从当前字符串中删除指定字符的所有前导匹配项。
id = row.Categoryid?.TrimStart('$');
更新
因此,进一步分析它是与Null-conditional operator有关的错误。正确删除row.Categoryid.Substring(1)
替代品时row.Categoryid[1..]
更新
进一步更新,这似乎是一个已知的错误,并且已经有针对此问题的拉取请求,计划发布16.9.P1
推荐阅读
- php - 警告在 php 中遇到的非数字值
- ios - Core Data 在一对多关联中双插入子记录
- python - 如何从文件中将值添加到现有的空值键字典?
- segmentation-fault - 即使访问的地址可访问,是否也可能导致段错误?
- c# - 用于将路由模板与请求路径匹配的正则表达式
- python - 如何使用 pexpect 在多个文件上运行 osm2pgsql?坚持“使用 PBF 解析器”。
- cmake - 在另一个目标中包含一个目标的包含目录
- reactjs - React Router 在页脚上渲染页面
- javascript - 将 url 复制到剪贴板后显示成功消息
- python - 在 Spyder 中安装 Python 3.6