2015-12-21 35 views
1

我是ASP.NET和C#編程的初學者。我有兩個電話和報告。 我想在Default.aspx.cs文件中調用函數LookupNumber(Phone p),並獲取數組列表的每個返回值,並在標籤控件中顯示返回的值。 但我得到這個錯誤:調用函數時調用返回的數組列表值

Error 1 An object reference is required for the non-static field, method, or property 'PhoneLookup.Models.Phone.LookupNumber(Phone.Models.Phone)' C:\Users\Erik\Desktop\Phone\Phone\Default.aspx.cs 24 26 Phone

Error 2 An object reference is required for the non-static field, method, or property 'PhoneLookup.Models.Phone.LookupNumber(Phone.Models.Phone)' C:\Users\Erik\Desktop\Phone\Phone\Default.aspx.cs 24 26 Phone

Error 3 An object reference is required for the non-static field, method, or property 'PhoneLookup.Models.Phone.LookupNumber(Phone.Models.Phone)' C:\Users\Erik\Desktop\Phone\Phone\Default.aspx.cs 24 26 Phone

這裏是我的源代碼:

// Report.cs 

namespace PhoneLookup.Models 
{ 
    public class Report 
    { 
     private String _name_surname; 
     private String _address; 
     private String _area_code; 
     private String _exchange; 
     private String _service_provider; 

     public Report() 
     { 
      _name_surname = String.Empty; _address = String.Empty; _area_code = String.Empty; 
      _exchange = String.Empty; _service_provider = String.Empty; 
     } 

     public String name_surname { get; set; } 
     public String address { get; set; } 
     public String area_code { get; set; } 
     public String exchange { get; set; } 
     public String service_provider { get; set; } 
    } 
} 

// Phone.cs Class 
namespace PhoneLookup.Models 
{ 
    public class Phone 
    { 
     private Int16 _phone_number; 

     public Phone() 
     { 
      _phone_number = -1; 
     } 

     public Int16 phone_number { get; set; } 

     public Report[] LookupNumber(Phone p) 
     { 
      List<Report> lst = new List<Report>(); 
      MySqlConnection Conn = new MySqlConnection(constr); 
      Conn.Open(); 
      MySqlCommand Cmd = new MySqlCommand("SELECT * FROM Reports WHERE phone_number = @pn", Conn); 
      Cmd.Parameters.AddWithValue("@pn", p.phone_number); 
      MySqlDataReader Reader = Cmd.ExecuteReader(); 
      while (Reader.Read()) 
      { 
      lst.Add(new Report() 
      { 
       name_surname = Reader["name_surname"]).ToString(), 
       address = Reader["address"].ToString(), 
       area_code = Reader["area_code"].ToString(), 
       exchange = Reader["exchange"].ToString(), 
       service_provider = Reader["service_provider"].ToString(), 
      }); 

} 
      return lst.ToArray(); 
     } 
    } 
} 


// Default.aspx.cs 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Phone p = new Phone(); 
    p.phone_number = Convert.ToInt16(q.Text); 
// display name surname 
    Report[] ns = Phone.LookupNumber(p).Select(x => x.name_surname).ToArray(); 
// display adddress 
    Report[] ad = Phone.LookupNumber(p).Select(x => x.address).ToArray(); 
// display service provider 
    Report[] sp = Phone.LookupNumber(p).Select(x => x.service_provider).ToArray(); 
    Label1.Text = ns.ToString(); 
    Label2.Text = ad.ToString(); 
    Label3.Text = sp.ToString(); 
} 

感謝所有!

+2

看起來你需要'電話'實例而不是它的類型。像'var p = new Phone();'並調用'p.LookupNumber(...)'等。或者像'public static Report [] LookupNumber'一樣將這個'LookupNumber'方法改爲'static'。 –

+0

@SonerGönül\t 我改變,但我得到這個錯誤:錯誤無法隱式轉換類型「字符串[]」到「Phone.Models.Report []」 – nakib

回答

0

嘗試改變:

public Report[] LookupNumber(Phone p) 

到:

public static Report[] LookupNumber(Phone p) 
+0

我改變,但我得到這個錯誤:錯誤無法將類型'string []'隱式轉換爲'Phone.Models.Report []' – nakib

+0

轉換問題是由您的LINQ語句引起的。你正在做一個返回一個字符串的select。所以,LINQ語句將返回一個字符串數組。 –

+0

此外,請注意。最好是調用LookupNumber函數來獲取電話號碼的報告,然後查詢檢索到的報告。 –

1

看看你的代碼線以下

Report[] ns = Phone.LookupNumber(p).Select(x => x.name_surname).ToArray(); 

首先LookupNumber(p)是實例方法,而不是一個靜態方法等你應該把它叫做p.LookupNumber(p)(或)通過在前加上靜態方法來聲明它關鍵字。

其次,LINQ呼叫Select(x => x.name_surname).ToArray()將使您選擇特定的字段,其是string類型,但要存儲它作爲Report[]返回一個字符串數組string[]。你還是讓喜歡

string[] ns = Phone.LookupNumber(p).Select(x => x.name_surname).ToArray(); 

每您的評論:

是那是因爲你是在收集obejct調用ToString()如可以在下面描述。

Label1.Text = ns.ToString(); 

如果你真的想在勒貝爾顯示則可能得到數組中的第一元素,如下面顯示它(或)使用不同的控制一樣ListBox

Label1.Text = ns.FirstOrDefault(); 
+0

string [] ns = Phone.LookupNumber(p).Select(x => x.name_surname).ToArray();返回給我:System.String [] – nakib

+0

如果有幫助,請參閱編輯回答。 – Rahul

0

如果您正在使用「哪裏「而不是」選擇「?

Report[] ns = Phone.LookupNumber(p).where(x => x.name_surname == ?).ToArray();

通過它的外觀,如果您試圖「選擇」一個字段,該字段的類型將被返回(即字符串)。