在VB中String.Replace正常工作,但在C#中却不行

4
以下VB代码可以正常工作,不会出现任何错误提示。
strLine = strLine.Replace(strLine.LastIndexOf(","), "")

然而,同样的C#代码不能:

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

这段代码无法编译,因为它显示:

“string.Replace(string,string)”的最佳重载方法具有一些无效的参数。

为什么在VB中可以工作而在C#中不行?如何解决?

我以为它可能类似于C# string.Replace doesn't work,但它暗示那段代码实际上可以编译。

同样地,对于其他的string.Replace问题:string.Replace (or other string modification) not working,它们似乎可以编译,而我的则不能。


1
我很好奇 - 你有没有阅读MSDN上关于你正在尝试使用的方法的文档? - J. Steen
4
以下VB代码移除所有","分隔符 - 不是的,它删除数据字符串中最后一个逗号位置的文本表示的所有出现。例如,所有出现的“42”。 - GSerg
@J.Steen - 我回顾了一些我在学校写的作业(全部是用VB写的),尝试了直接复制/粘贴/修改到C#。我现在正在阅读相关资料。 - Ewan
1
@Ewan 它已经“编译”了,这与工作完全不同。那个VB代码相当荒谬,几乎肯定不能实现你想要的功能。当给出非常规代码时,VB代码更有可能编译但无法正常工作;而C#只有在给出合理的代码后才会编译。 - Servy
@Ewan 错误。VB不是一种解释型语言。它只是在编译时没有进行太多的验证,这与根本不是一种编译语言是非常不同的。VBScript是解释型的,虽然它在很多方面看起来和行为类似,但它是完全不同的语言。 - Servy
显示剩余8条评论
6个回答

8

LastIndexOf 返回的是一个整数,而不是一个字符串。 Replace 接受 string, string 作为参数,您却传递了 int, string,因此出现了异常 The 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();

4
抢先一步了。VB的原因在于它会尝试为您将数字转换为字符串。如果在文件顶部添加“Option Strict On”,则应该会看到编译失败,并显示类似于C#错误的错误信息。 - pipTheGeek
这个答案是正确的。它只是VB在幕后尝试隐式转换对象。C#更好地防止你这样做。 - Cortright
@tnw - 谢谢!我在我的VB代码中加入了选项严格,结果整个学校的代码都出现了成千上万的错误。这表明他们在学校里教你什么都不是! - Ewan
@Ewan 看到我的编辑了吗 -- 如果你只想替换最后一个逗号,那我已经考虑到了。 - tnw

1

阅读文档,我很惊讶第一个例子居然能够工作。string.Replace应该接收一对字符或者一对字符串,而不是先是一个整数再是一个字符串。也许VB版本会自动将整数转换为其字符表示形式?


1
该项目可以选择关闭Option Strict,允许晚期绑定将整数静默转换为字符串。 - J. Steen
真的。我之前没有考虑过这一点。尽管OP说了,但我仍然怀疑它是否能正常运行。更像是正在正确构建 - Geeky Guy

0
在C#中,String.Replace的第一个参数必须是char或string类型,但您使用了一个整数(string.LastIndexOf返回一个整数)。 为什么不使用以下方法:
strLine = strLine.Replace(',', '');

0
在C#中,LastIndexOf返回一个int,但Replace期望第一个参数是一个stringchar。我不知道VB,无法解释你的代码为什么有效,但我可以解释在C#中,你不能传递一个integer到需要stringchar的位置。
在C#中,这将实现你想要的功能:
strLine = strLine.Replace(',', ''); 

希望这有所帮助。

0

你可以使用 String.Remove

strLine = strLine.Remove(strLine.LastIndexOf(','), 1);

0

请尝试以下操作

string.Replace("," , "");

可能需要添加一些细节,解释为什么这样做会起作用,而不仅仅是提供一段代码。 - Mike
我在厕所上,用我的小手机看着堆栈。我只能提供代码转储。 - DotNetRussell
没问题,这只是一条FYI(供参考):有时候简短的回答会被放在“低质量”审核队列中,那就是我找到你的回答的地方。因此,重要的是为OP添加细节,并确保你的答案不会被标记为低质量。 - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接