4

以下 VB 代码可以正常工作,并且不会标记任何错误。

strLine = strLine.Replace(strLine.LastIndexOf(","), "")

但是,相同的 C# 代码不会:

strLine = strLine.Replace(strLine.LastIndexOf(","), "");

这不会像它说的那样编译

'string.Replace(string,string)' 的最佳重载方法有一些无效的论点。

为什么这在 VB 中有效,但在 C# 中无效?我该如何解决这个问题?

我认为它可能类似于C# string.Replace 不起作用,但这意味着该代码实际上会编译。

与其他 string.Replace 问题类似:string.Replace (或其他字符串修改) not working,看起来它们实际上会编译,而我的不会。

4

6 回答 6

8

LastIndexOf返回一个整数,而不是字符串。作为参数,你正在传递它Replace,因此异常string, stringint, stringThe best overloaded method for 'string.Replace(string,string)' has some invalid arguements.

如果你只是想删除所有,使用这个:

strLine = strLine.Replace(",", "");

根据您的代码,您可能只想替换最后一个实例,,如果您想要的话,请尝试以下操作:

StringBuilder sb = new StringBuilder(strLine);
sb[strLine.LastIndexOf(",")] = "";
strLine = sb.ToString();
于 2013-05-02T18:02:27.083 回答
1

阅读文档,我很惊讶第一个示例完全有效。string.Replace 应该接收几个字符或几个字符串,而不是一个整数,然后是一个字符串。Pheraps VB 版本自动将整数转换为其字符表示?

于 2013-05-02T18:03:34.667 回答
0

尝试以下

string.Replace("," , "");
于 2013-05-02T18:03:17.477 回答
0

您可以使用String.Remove

strLine = strLine.Remove(strLine.LastIndexOf(','), 1);
于 2013-05-02T18:20:07.477 回答
0

在 c# 中,String.Replace 的第一个参数必须是 char 或 string,但您使用的是整数(string.LastIndexOf 返回整数)。为什么不直接使用:

strLine = strLine.Replace(',', '');
于 2013-05-02T18:08:24.943 回答
0

在 C#中LastIndexOf返回 an int,但Replace需要 astring或 achar作为第一个参数。我不知道 VB 来解释为什么你的代码有效,但我可以解释在 C# 中你不能传递integerastring或 achar预期的位置。

在 C# 中,这将做你想做的事:

strLine = strLine.Replace(',', ''); 

希望有帮助。

于 2013-05-02T18:17:13.583 回答