2011-09-23 39 views
3
Console.WriteLine("Enter the page that you would like to set the bookmark on: "); 
    SetBookmarkPage(int.Parse(Console.ReadLine)); 

這是int.Parse(字符串)部分,它給出了該線程主題的錯誤消息。不明白我應該做什麼,我將字符串解析爲一個int並使用SetBookmarkPage方法發送它,我錯過了什麼? SetBookmarkPage看起來是這樣的,並且包含在同一類:'int.Parse(string)'的最佳重載方法匹配有一些無效參數

private void SetBookmarkPage(int newBookmarkPage) {}

+0

感嘆......錯過了一些括號.. 我責怪疲倦和VS沒有像Netbeans那樣完成括號:p 感謝您爲TryParse指出了我顯而易見的愚蠢錯誤> _ < –

回答

2

它到Console.ReadLine

2

你需要調用到Console.ReadLine:

SetBookmarkPage(int.Parse(Console.ReadLine()));  

注意,在上述的額外()

您當前的方法正在傳遞一個由Console.ReadLine方法構建的委託,而不是被調用方法的結果。這就是說,如果你正在閱讀用戶的輸入,我強烈推薦使用int.TryParse而不是int.Parse。用戶輸入經常出現錯誤,這可以讓你優雅地處理它。

2

你想:

SetBookmarkPage(int.Parse(Console.ReadLine())); 

在它的可視Console.ReadLine方法組,並嘗試應用方法組轉換的時刻 - 這將如果你再使用它作爲一個參數工作一種採用Func<string>或類似方法的方法,但不適用於僅採用字符串的方法。

你想調用該方法,然後將結果作爲參數傳遞。要調用該方法,您需要括號。

2

你大概的意思是:

SetBookmarkPage(int.Parse(Console.ReadLine())); 

注意的括號ReadLine後。您正嘗試傳遞ReadLine的代表而不是返回值。

2

Console.ReadLine後變成

SetBookmarkPage(int.Parse(Console.ReadLine())); 

你人失蹤()是一個方法,你必須用括號調用它:

SetBookmarkPage(int.Parse(Console.ReadLine())); 

如果沒有括號,編譯器認爲它是一個方法組。

4

int.Parse沒有超載需要委託。這聽起來像你想要做的

int.Parse(Console.ReadLine()) 

然而,即使這樣你就暴露你的程序潛在的例外。你應該這樣做:

int bookmarkId = 0; 
string info = Console.ReadLine(); 

if(!int.TryParse(info, out bookmarkId)) 
    Console.WriteLine("hey buddy, enter a number next time!"); 

SetBookmarkPage(bookmarkId); 
+0

+1。在進行大量進口和轉換時,它多次拯救了我的屁股。 – rownage

相關問題