2015-12-21 84 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();

通过它的外观,如果您试图“选择”一个字段,该字段的类型将被返回(即字符串)。

相关问题