C# 我应该如何避免代码中的CS0120错误?
首先我会让你看看我的代码, 我有一个类存储一些数据:C# 我应该如何避免代码中的CS0120错误?,c#,C#,首先我会让你看看我的代码, 我有一个类存储一些数据: public class Balta { public int x; public int y; public int raza; public int cantApa; public int id; public int intersect; public Balta(int xs, int ys, int r, int
public class Balta
{
public int x;
public int y;
public int raza;
public int cantApa;
public int id;
public int intersect;
public Balta(int xs, int ys, int r, int cApa, int ids, int intersctt)
{
x = xs;
y = ys;
raza = r;
cantApa = cApa;
id = ids;
intersect = intersctt;
}
}
其次,我有一个类,它列出了这些数据,并将其按顺序存储。一旦我消除了这个讨厌的错误,我还打算对这些数据进行一些操作
public class Baltile
{
public int n;
List<Balta> balti = new List<Balta>();
public void populate(Balta balta)
{
int unitId = balta.id;
if (balti.Any(Balta => Balta.id == balta.id))
{
int pos = balti.FindIndex(Balta => Balta.id == balta.id);
balti[pos] = balta;
}
else if (balti.Any(Balta => Balta.cantApa == -1) && !balti.Any(Balta => Balta.id == unitId))
{
int pos = balti.FindIndex(Balta => Balta.cantApa == -1);
balti[pos] = balta;
}
else //daca nu inseamna ca aduaugi balta la lista
{
balti.Add(balta);
}
}
}
public-class-Baltile
{
公共int n;
List BARTI=新列表();
公共空间填充(Balta Balta)
{
int unitId=balta.id;
if(balti.Any(Balta=>Balta.id==Balta.id))
{
int pos=balti.FindIndex(Balta=>Balta.id==Balta.id);
巴尔蒂[位置]=巴尔塔;
}
else if(balti.Any(Balta=>Balta.cantApa==-1)和&!balti.Any(Balta=>Balta.id==unitId))
{
int pos=balti.FindIndex(Balta=>Balta.cantApa==-1);
巴尔蒂[位置]=巴尔塔;
}
其他//daca nu inseamna ca aduaugi balta la lista
{
波罗的海-加(巴尔塔);
}
}
}
main看起来像这样
static void Main(string[] args)
{
Baltile balti = new Baltile();
while (true)
{
"data input block"
for (int i = 0; i < unitCount; i++)
{
"more data input"
if (i>2)
{
Balta balta = new Balta(x, y, radius, extra, unitId, 0);
Baltile.populate(balta);//the CS0120 error is here
}
}
}
}
static void Main(字符串[]args)
{
波罗的海=新波罗的海();
while(true)
{
“数据输入块”
对于(int i=0;i2)
{
Balta Balta=新Balta(x,y,半径,额外,单位ID,0);
populate(balta);//这里是CS0120错误
}
}
}
}
所以CS0120告诉我非静态字段、方法或属性需要一个对象引用。这意味着main是静态的,所以如果我理解正确,我不能调用非静态方法?将所有内容声明为静态将导致更多错误
我该怎么做?我似乎不知道如何使我的代码工作?
Baltile.populate(balta);
而Baltile
作为一个类名,这需要populate()
作为一个静态方法
,则完整的错误消息为
编译器错误CS0120
非静态字段、方法或对象需要对象引用
属性“成员”
这告诉您使用对象而不是类。您似乎已经有了一个名为balti
的对象来实现这一目的。所以使用
balti.populate(balta);
相反。现在,您可以对实例(对象)而不是类调用populate()
方法