2013-08-28 58 views
0

這是爲我的大學課程和截止日期爲2天,我仍然必須完成程序測試代碼,並在此之前評估。我有錯誤「沒有重載方法'getValidString'需要參數」。這是什麼意思,我該如何解決它?

以下是常規代碼。

public static string getValidString(string prompt, int maxLength) 
{ 
    bool valid = false; 
    //The paramter valid is set as a boolean and is set to false. 
    //It is set as a boolean because it is a small data type and 
    //only needs to have true or false 
    string tempData = ""; 
    do // Do while loop is repetition and carries on doing it until the condition becomes true 
    { 
     Console.Write(prompt + " ?"); 
     tempData = Console.ReadLine(); 
     if (tempData == "") 
      displayMessage("You have not entered any data, please try again"); 
     else if (tempData.Length < 3) 
      displayMessage("You have not entered text longer than 3, please try again"); 
     else if (tempData.Any(c => char.IsDigit(c))) 
      displayMessage("You have not entered text, please try again"); 
     else if (tempData.Length > maxLength) 
      displayMessage("Name too long it must be 20 or less, please try again"); 
     else 
      valid = true; 
    } 
    while (valid == false); 
    return tempData; 
} 

而我的程序中有錯誤的代碼在下面。我該如何解決?謝謝

private void btncustCont_Click(object sender, EventArgs e) 
{ 
    txtName.Text = custName[numCust]; 
    txtPhoneNumber.Text = custPhone[numCust]; 
    string sError = ""; 
    sError = routine.getValidString("Customer Name", txtName.Text, 3, 30); 
    sError += routine.getValidString("Customer Phone Number", txtPhoneNumber.Text, 3, 30); 
    if (sError != "") 
    MessageBox.Show(sError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 

    if (sError == "") 
     grpPrint.Enabled = true; 
} 

回答

1

您的方法定義只有兩個參數public static string getValidString(string prompt, int maxLength)。但是你用4調用它:sError = routine.getValidString("Customer Name", txtName.Text, 3, 30);

要麼缺少的參數添加到getValidString:public static string getValidString(string prompt, int maxLength, int foo, int bar)

還是從sError行刪除:sError = routine.getValidString("Customer Name", txtName.Text);

+0

沒有解釋如何解決它;-) –

+0

@MauricioGracia謝謝。更新! – JeremiahDotNet

1

它只是說有沒有版本的getValidString它接受你試圖通過它的參數。查看方法的定義。你可以通過鼠標懸停來做到這一點。如果有超載,就會有小箭頭循環通過它們。這些信息會告訴我們哪些類型,以及它們被接受的順序。

哦,我剛剛注意到你的定義在上面列出。正如你所看到的,它只接受一個字符串和一個int。你試圖用參數列表來調用它;字符串,字符串,int,int。您需要更改方法以接受所有這些參數,或者更改調用代碼以使用字符串和int調用它。

+0

@MauricioGracia該方法的名稱未包含在代碼塊中,因此我沒有注意到它。看到它後,我添加了一個編輯。 – evanmcdonnal

3

你的方法getValidString有2個輸入:string promptint maxLength

但是,你發送2串和2個int(共4)("Customer Name", txtName.Text, 3, 30)

要麼超載getValidString採取4輸入這樣

public static string getValidString(string prompt, string name, int length, int maxLength) 

或只有一個string發送和int

routine.getValidString("Customer Phone Number", 30); 
1

你的函數簽名被定義爲以下:

public static string getValidString(string prompt, int maxLength) { /* CODE */ } 

據取2個參數:prompt(一個string)和maxLength(一個int)。

當你以後調用它,您傳遞四個參數是:

sError = routine.getValidString("Customer Name", txtName.Text, 3, 30); 

由於是getValidString()沒有簽名要傳遞的參數匹配(stringstringintint) C#編譯器出現錯誤。

+0

沒有解釋如何解決它 –

+0

@MauricioGracia:因爲沒有明確的方法來解決它。他爲什麼要傳遞額外的參數,他們應該做什麼?爲了解決這個問題,該方法必須進行修改(或重載),但到底是什麼?簡單地將適當的參數添加到函數簽名是毫無意義的。很明顯,他試圖通過傳遞這些參數來完成某件事情,但究竟是什麼? –

相關問題