"Use range operator" 建议的修复产生无效代码
"Use range operator" suggested fix produces invalid code
ASP.NET .NET 4 中的 5 MVC 项目使用 Substring 是源代码,如
id = row.Categoryid?.Substring(0, 1) == "$" ? row.Categoryid?.Substring(startIndex: 1) :
row.Categoryid?.Substring(0)
Visual Studio 2019年质检员抛出留言
IDE0057 Substring can be simplified
在
startIndex: 1
应用建议的修复后
Use range operator
代码重构为
id = row.Categoryid?.Substring(0, 1) == "$" ? row.Categoryid?.Substring[1..] :
row.Categoryid?.Substring(0)
会抛出编译错误
Error CS0021 Cannot apply indexing with [] to an expression of type
'method group'
如何解决这个问题以便重构创建正确的代码?
忽略任何其他问题并解决手头的问题,您不能在 方法 上使用 范围 ,例如 Substring
例如 Categoryid.Substring[1..]
它需要是:
row.Categoryid?[1..]
或者以此为逻辑结论:
var id = row.Categoryid?[0] == '$' ? row.Categoryid?[1..] : row.Categoryid;
至于为什么会这样建议完全是另一个问题。它要么是 VS 错误,要么可能是 Resharper,具体取决于建议和实施的内容
注意:假设您只是想从字符串的开头删除一个 $
,并且永远只有一个(或者如果有不止一个,您还希望将它们删除)。您可以使用 TrimStart
.
为自己节省一堆 可打印字符
Removes all the leading occurrences of a specified character from the current string.
id = row.Categoryid?.TrimStart('$');
更新
所以进一步分析,这是一个与 Null-conditional operator 有关的错误。删除后 row.Categoryid.Substring(1)
正确替换 row.Categoryid[1..]
更新
进一步更新,这似乎是一个已知错误,并且已经有针对此问题的拉取请求计划发布 16.9.P1
Fix "IDE0057: Invalid code fix with string.Substring and null-conditional operator" #47377
ASP.NET .NET 4 中的 5 MVC 项目使用 Substring 是源代码,如
id = row.Categoryid?.Substring(0, 1) == "$" ? row.Categoryid?.Substring(startIndex: 1) :
row.Categoryid?.Substring(0)
Visual Studio 2019年质检员抛出留言
IDE0057 Substring can be simplified
在
startIndex: 1
应用建议的修复后
Use range operator
代码重构为
id = row.Categoryid?.Substring(0, 1) == "$" ? row.Categoryid?.Substring[1..] :
row.Categoryid?.Substring(0)
会抛出编译错误
Error CS0021 Cannot apply indexing with [] to an expression of type 'method group'
如何解决这个问题以便重构创建正确的代码?
忽略任何其他问题并解决手头的问题,您不能在 方法 上使用 范围 ,例如 Substring
例如 Categoryid.Substring[1..]
它需要是:
row.Categoryid?[1..]
或者以此为逻辑结论:
var id = row.Categoryid?[0] == '$' ? row.Categoryid?[1..] : row.Categoryid;
至于为什么会这样建议完全是另一个问题。它要么是 VS 错误,要么可能是 Resharper,具体取决于建议和实施的内容
注意:假设您只是想从字符串的开头删除一个 $
,并且永远只有一个(或者如果有不止一个,您还希望将它们删除)。您可以使用 TrimStart
.
Removes all the leading occurrences of a specified character from the current string.
id = row.Categoryid?.TrimStart('$');
更新
所以进一步分析,这是一个与 Null-conditional operator 有关的错误。删除后 row.Categoryid.Substring(1)
正确替换 row.Categoryid[1..]
更新
进一步更新,这似乎是一个已知错误,并且已经有针对此问题的拉取请求计划发布 16.9.P1
Fix "IDE0057: Invalid code fix with string.Substring and null-conditional operator" #47377