2013-05-02 106 views
4

以下VB代碼正常工作,不會標記任何錯誤。String.Replace在VB中工作,但不是C#

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

但是相同的C#代碼並不:

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

這將無法編譯,因爲它說

爲「最好的重載方法與string.replace(字符串,字符串) '有一些無效的論點。

爲什麼這個工程在VB中而不是在C#?我該如何解決這個問題?

我想這可能是類似於C# string.Replace doesn't work但它意味着,該代碼將INFACT請編譯。

與其他問題與string.replace同樣

string.Replace (or other string modification) not working,看來他們將逸岸編譯,而我的不會。

+1

我很好奇 - 你看了MSDN上的文檔,你要使用的方法? – 2013-05-02 18:02:30

+4

'以下VB代碼刪除所有「,」分隔符「 - 否,它刪除數據字符串中最後一個逗號位置的文本表示的所有出現。例如,所有發生的「42」。 – GSerg 2013-05-02 18:04:58

+0

@ J.Steen - 我回頭看看我的一些作業(全部在VB中),並試圖直接複製/粘貼/修改爲C#。我剛纔正在閱讀。 – Ewan 2013-05-02 18:05:03

回答

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 2013-05-02 18:04:00

+0

這個答案是正確的。這只是VB試圖在引擎蓋下爲你隱式投射對象。 C#最好不要讓你脫身。 – Cortright 2013-05-02 18:06:40

+0

@tnw - 謝謝!我在我的VB中添加了嚴格的選項,並且在我的整個學校代碼中遭到數千個錯誤的轟炸。去顯示他們沒有在學校教你任何東西! – Ewan 2013-05-02 18:10:45

0

請嘗試以下內容

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

可能想添加一些細節*爲什麼*會起作用,而不僅僅是代碼轉儲 – Mike 2013-05-02 18:20:53

+0

我正在廁所裏看着我的小手機上的堆棧。代碼轉儲是我所能提供的。 – 2013-05-02 18:33:14

+0

沒問題,這更多的是一個參考:簡答題有時會被放置在評價隊列上,顯示爲「低質量」,這就是我找到你的地方的地方。因此,爲OP添加詳細信息以及確保您的答案不會顯示低質量很重要。 – Mike 2013-05-02 18:35:19

1

閱讀the documentation,我很驚訝第一個例子可以工作。 string.Replace應該接收一對字符或幾個字符串,而不是一個整數,然後是一個字符串。 Pheraps的VB版本正在將整數轉換爲其字符表示自動?

+1

該項目可以選擇嚴格關閉,允許後期綁定靜默地將整數轉換爲字符串。 – 2013-05-02 18:04:22

+0

是的。沒有想到這一點。正如OP所說,我仍然懷疑它是否正常工作。更像是* building *正確。 – Renan 2013-05-02 18:06:42

+0

建立是的,工作,沒有。 =) – 2013-05-02 18:07:00

0

在C#中與string.replace的第一個參數必須是char或字符串,但您使用的是整數(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);