C# 非静态字段、方法或属性需要对象引用

C# 非静态字段、方法或属性需要对象引用,c#,winforms,C#,Winforms,静态方法不应该引用自身,它应该引用您传递给它的IDnumber,如下所示: using System; using System.IO; using System.Data; using System.Text; using System.Drawing; using System.Data.OleDb; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.

静态方法不应该引用自身,它应该引用您传递给它的IDnumber,如下所示:

using System;
using System.IO;
using System.Data;
using System.Text;
using System.Drawing;
using System.Data.OleDb;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.Collections.Generic;

namespace Eagle_Eye_Class_Finder
{

    public class GetSchedule
    {
        public GetSchedule()
        {
            IDnumber[] IDnumbers = new IDnumber[3];
            IDnumbers[0] = new IDnumber() { Name = "Joshua Banks", ID = "900456317", year = "Senior", class1 = "TEET 4090", class2 = "TEET 3020", class3 = "TEET 3090", class4 = "TEET 4290" };
            IDnumbers[1] = new IDnumber() { Name = "Sean Ward", ID = "900456318", year = "Junior", class1 = "ENGNR 4090", class2 = "ENGNR 3020", class3 = "ENGNR 3090", class4 = "ENGNR 4290" };
            IDnumbers[2] = new IDnumber() { Name = "Terrell Johnson", ID = "900456319", year = "Sophomore", class1 = "BUS 4090", class2 = "BUS 3020", class3 = "BUS 3090", class4 = "BUS 4290" };

        }
        public class IDnumber
        {
            public string Name { get; set; }
            public string ID { get; set; }
            public string year { get; set; }
            public string class1 { get; set; }
            public string class2 { get; set; }
            public string class3 { get; set; }
            public string class4 { get; set; }


           public static void ProcessNumber(IDnumber myNum)
                {
                    StringBuilder myData = new StringBuilder();
                    myData.AppendLine(IDnumber.Name);   
                    myData.AppendLine(": ");   
                    myData.AppendLine(IDnumber.ID);   
                    myData.AppendLine(IDnumber.year);   
                    myData.AppendLine(IDnumber.class1);   
                    myData.AppendLine(IDnumber.class2);   
                    myData.AppendLine(IDnumber.class3);   
                    myData.AppendLine(IDnumber.class4);  
                    MessageBox.Show(myData);
                }

            public string GetDataFromNumber(string ID)
            {

               foreach (IDnumber idCandidateMatch in IDnumbers)  

            { 

            if (IDCandidateMatch.ID == ID)
                {
                     StringBuilder myData = new StringBuilder();
                     myData.AppendLine(IDnumber.Name);   
                     myData.AppendLine(": ");   
                     myData.AppendLine(IDnumber.ID);   
                     myData.AppendLine(IDnumber.year);   
                     myData.AppendLine(IDnumber.class1);   
                     myData.AppendLine(IDnumber.class2);   
                     myData.AppendLine(IDnumber.class3);   
                     myData.AppendLine(IDnumber.class4);  
                     return myData;
        }
    }
    return "";
}
        }

    }
}using System;
using System.IO;
using System.Data;
using System.Text;
using System.Drawing;
using System.Data.OleDb;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.Collections.Generic;

namespace Eagle_Eye_Class_Finder
{

    public class GetSchedule
    {
        public GetSchedule()
        {
            IDnumber[] IDnumbers = new IDnumber[3];
            IDnumbers[0] = new IDnumber() { Name = "Joshua Banks", ID = "900456317", year = "Senior", class1 = "TEET 4090", class2 = "TEET 3020", class3 = "TEET 3090", class4 = "TEET 4290" };
            IDnumbers[1] = new IDnumber() { Name = "Sean Ward", ID = "900456318", year = "Junior", class1 = "ENGNR 4090", class2 = "ENGNR 3020", class3 = "ENGNR 3090", class4 = "ENGNR 4290" };
            IDnumbers[2] = new IDnumber() { Name = "Terrell Johnson", ID = "900456319", year = "Sophomore", class1 = "BUS 4090", class2 = "BUS 3020", class3 = "BUS 3090", class4 = "BUS 4290" };

        }
        public class IDnumber
        {
            public string Name { get; set; }
            public string ID { get; set; }
            public string year { get; set; }
            public string class1 { get; set; }
            public string class2 { get; set; }
            public string class3 { get; set; }
            public string class4 { get; set; }


           public static void ProcessNumber(IDnumber myNum)
                {
                    StringBuilder myData = new StringBuilder();
                    myData.AppendLine(IDnumber.Name);   
                    myData.AppendLine(": ");   
                    myData.AppendLine(IDnumber.ID);   
                    myData.AppendLine(IDnumber.year);   
                    myData.AppendLine(IDnumber.class1);// i get it for all of these   
                    myData.AppendLine(IDnumber.class2);   
                    myData.AppendLine(IDnumber.class3);   
                    myData.AppendLine(IDnumber.class4);  
                    MessageBox.Show(myData);
                }

            public string GetDataFromNumber(string ID)
            {

               foreach (IDnumber idCandidateMatch in IDnumbers)  

            { 

            if (IDCandidateMatch.ID == ID)
                {
                     StringBuilder myData = new StringBuilder();
                     myData.AppendLine(IDnumber.Name);   
                     myData.AppendLine(": ");   
                     myData.AppendLine(IDnumber.ID);   
                     myData.AppendLine(IDnumber.year);   
                     myData.AppendLine(IDnumber.class1);   
                     myData.AppendLine(IDnumber.class2);   
                     myData.AppendLine(IDnumber.class3);   
                     myData.AppendLine(IDnumber.class4);  
                     return myData;
        }
    }
    return "";
}
        }

    }
}

虽然代码很多,但这里有一个例子

public static void ProcessNumber(IDnumber myNum)
{
    StringBuilder myData = new StringBuilder();
    myData.AppendLine(myNum.Name);
    myData.AppendLine(": ");
    myData.AppendLine(myNum.ID);
    myData.AppendLine(myNum.year);
    myData.AppendLine(myNum.class1);// i get it for all of these   
    myData.AppendLine(myNum.class2);
    myData.AppendLine(myNum.class3);
    myData.AppendLine(myNum.class4);
    MessageBox.Show(myData.ToString());
}

您的方法是静态的,但包含您引用的成员的类不是静态的,它不会以这种方式工作,因为该方法永远不会属于某个实例。

一种解决方案是这样做:

public class IDnumber 
    { 
        public string Name { get; set; } 
        public string ID { get; set; } 
        public string year { get; set; } 
        public string class1 { get; set; } 
        public string class2 { get; set; } 
        public string class3 { get; set; } 
        public string class4 { get; set; } 


       public static void ProcessNumber(IDnumber myNum) 
            { 
                StringBuilder myData = new StringBuilder(); 
                myData.AppendLine(IDnumber.Name);    
                myData.AppendLine(": ");    
                myData.AppendLine(IDnumber.ID);    
                myData.AppendLine(IDnumber.year);    
                myData.AppendLine(IDnumber.class1);// i get it for all of these    
                myData.AppendLine(IDnumber.class2);    
                myData.AppendLine(IDnumber.class3);    
                myData.AppendLine(IDnumber.class4);   
                MessageBox.Show(myData); 
            } 
 public static void ProcessNumber(IDnumber myNum)
 {
                    StringBuilder myData = new StringBuilder();
                    myData.AppendLine(myNum.Name);   
                    myData.AppendLine(": ");   
                    myData.AppendLine(myNum.ID);   
                    myData.AppendLine(myNum.year);   
                    myData.AppendLine(myNum.class1);   
                    myData.AppendLine(myNum.class2);   
                    myData.AppendLine(myNum.class3);   
                    myData.AppendLine(myNum.class4);  
                    MessageBox.Show(myData);
 }
而不是:

        foreach (IDnumber idCandidateMatch in IDnumbers)  

        { 

        if (idCandidateMatch.ID == ID)
            {
                 StringBuilder myData = new StringBuilder();
                 myData.AppendLine(idCandidateMatch.Name);   
                 myData.AppendLine(": ");   
                 myData.AppendLine(idCandidateMatch.ID);   
                 myData.AppendLine(idCandidateMatch.year);   
                 myData.AppendLine(idCandidateMatch.class1);   
                 myData.AppendLine(idCandidateMatch.class2);   
                 myData.AppendLine(idCandidateMatch.class3);   
                 myData.AppendLine(idCandidateMatch.class4);  
                 return myData;
    }
因为名称(和其他属性)不是静态的

问题是这样的:

IDnumber.[属性]

比如说

IDnumber.ID

IDnumber.Name

因为身份证,名字。。。还有一些不是静态的。解决方案是在所有相关行中用实例变量替换类名:

idCandidateMatch.ID

idCandidateMatch.Name

。。。 (见上面的代码)

请注意,此处变量名使用不同的大小写:

       foreach (IDnumber idCandidateMatch in IDnumbers)  

        { 

        if (IDCandidateMatch.ID == ID)
            {
                 StringBuilder myData = new StringBuilder();
                 myData.AppendLine(IDnumber.Name);   
                 myData.AppendLine(": ");   
                 myData.AppendLine(IDnumber.ID);   
                 myData.AppendLine(IDnumber.year);   
                 myData.AppendLine(IDnumber.class1);   
                 myData.AppendLine(IDnumber.class2);   
                 myData.AppendLine(IDnumber.class3);   
                 myData.AppendLine(IDnumber.class4);  
                 return myData;
    }
}
return "";
在这里:

        foreach (IDnumber *idCandidateMatch* in IDnumbers)  

C#区分大小写,不应该起作用(除非我在源代码中遗漏了某些内容:)

尝试过它说不能在对象初始值设定项中指定静态字段或属性!嘿,BigJason,我可能错了,但是,如果不运行测试,我会说您的建议可以解决编译错误,但它可能不会帮助JB(问题的作者),因为当您将属性设置为静态时,该属性只有一个实例,并且该类的所有实例都将具有相同的propertz值(IDnumbers)[0]、IDnumbers[1]、IDnumbers[2]…)抱歉,我应该多读一些代码。我已经修复了上面的示例。希望这更有帮助。preciate BigJason,这很有帮助!我现在在if语句中得到了同样的结果!哦,来吧,做点努力,这不是一个代码共享网站。描述你的问题!学习如何提问!顺便说一句,他们通常以问号结尾。
        if (*IDCandidateMatch*.ID == ID)