字段初始化项不能引用非静态字段、方法或属性
本文关键字:字段 方法 属性 静态 初始化 不能 引用 | 更新日期: 2023-09-27 18:16:39
好的,我有下面的代码,从技术上讲,它所做的就是逐行读取db.txt
文件,然后将行0
拆分为一个名为password的数组。
private string[] lines = System.IO.File.ReadAllLines(@"U:'Final Projects'Bank'ATM'db.txt");
private string[] password = lines[0].Split(' ');
但是我得到错误:
字段初始化项不能引用非静态字段、方法或属性
考虑一下上面的含义以及您希望如何填充这些变量。您需要首先构造它们所属的类,然后希望代码行按照您希望的顺序执行,并且它们不会抛出异常。
编译器实际上是在告诉你这样做不对。
一个更好的方法是简单地写一个函数来做你想做的事情:
private string[] PasswordLines(){
string[] lines = System.IO.File.ReadAllLines(@"U:'Final Projects'Bank'ATM'db.txt");
return lines[0].Split(" ");
}
你可以在任何你想要的地方调用这个;例如:
public class MyClass()
{
private string[] Lines
{
get { return PasswordLines(); }
}
private string[] PasswordLines(){
string[] lines = System.IO.File.ReadAllLines(@"U:'Final Projects'Bank'ATM'db.txt");
return lines[0].Split(" ");
}
}
c#在文件初始化时不保证任何特定的执行顺序。
例如,这两行代码将产生未定义的结果:
private int a = b + 1;
private int b = a + 1;
理论上,两种可能的结果是a=1,b=2或a=2,b=1,但实际上情况更糟。我们甚至不知道a和b是否被初始化为它们的默认值(int为0),所以它可以是任何值(就像对未初始化对象的引用一样)。为了避免这种无法解决的情况,编译器要求所有字段初始化都是"运行时常量"(每次执行时都返回相同的值,并且独立于任何其他非"运行时常量"变量)。
只要在初始化复合字段时使用构造函数,生活就会再次变得美好。
就是这么说的!它们是(实例)字段初始化器,不能相互引用。将代码移到构造函数中,或者使它们成为方法变量而不是字段。
错误自解释
不能这样做,因为lines和password都是字段变量,你不能赋值
其中一个值与另一个值相等(如果是静态的,则可以)。
我希望你在一个类中使用这个代码,所以除非一个对象不是创建他们没有这些字段变量的真实存在,所以你不能把它们分配给对方。