C# 我希望字符串字段由另外两个字段组成

C# 我希望字符串字段由另外两个字段组成,c#,C#,我希望Fullname由FirstName和Lastname组成,但我得到以下例外情况: 字段初始值设定项不能引用非静态字段、方法或 属性“Employee.FirstName”/“Employee.LastName” 运行时不能保证类字段的赋值顺序。这就是编译器警告您编译时错误的原因 如果FullName是公共财产,您可以执行以下操作: class Employee { public string FirstName { get; } public string LastNam

我希望
Fullname
FirstName
Lastname
组成,但我得到以下例外情况:

字段初始值设定项不能引用非静态字段、方法或 属性“Employee.FirstName”/“Employee.LastName”


运行时不能保证类字段的赋值顺序。这就是编译器警告您编译时错误的原因

如果
FullName
是公共财产,您可以执行以下操作:

class Employee
{
    public string FirstName { get; }
    public string LastName { get; }
    public string FullName => $"{FirstName} {LastName}";
}
对于不使用C#-6的任何人:

或者,如果不希望它是公共的,则需要通过类构造函数实例化字段

class Employee
{
    public Employee(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
        fullName = $"{FirstName} {LastName}";
    }

    public string FirstName { get; }
    public string LastName { get; }
    private string fullName;
}

我想你需要把它放到类构造函数中。出现错误是因为您试图使用不存在的值,或者在使用这些值时可能不存在这些值。

您试图在初始化变量之前设置该值

如果你从一套变为一套,那么你会获得更多的成功

class Employee{
    public String FirstName { get; }
        public String LastName { get; }
        public String FullName {
            get{
                return String.Format("{0}, {1}", FirstName, LastName);
            }
        }
    }
}

OP正在使用仅自动获取程序属性(无
专用集
)。我猜他用的是C#-6。如果需要,他可以自由地将其降级为C#-5。@InvisiblePanda不需要
=>
运算符,他可以在类构造函数中设置它,与以前的C#版本不同,在C#版本中,您必须显式地使用一个私人setter。@Yuval Itzhakov没有批评您的答案,只是向其他阅读答案的人指出了要点,而不是使用C#6,因为他们不明白为什么C#6对您不起作用them@InvisiblePanda:
公共字符串名{get;}
在我看来像是一个属性。@InvisiblePanda:试着在6 C#之前的类定义中使用
公共字符串FirstName{get;}
。这与@Yuval Itzhakov只使用旧的C#的答案是一样的,他的答案更完整,我正在考虑使用
字符串而不是
字符串
;P@YuvalItzchakov我确实应该使用string而不是string,但使用java已经成为一种习惯:)string是通往System.string的一条关键字捷径,所以从技术上讲,string比string更正确。但从一个普遍使用的角度来看,情况正好相反。因此,可以用同样的有效性从两个方面进行论证
class Employee
{
    public Employee(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
        fullName = $"{FirstName} {LastName}";
    }

    public string FirstName { get; }
    public string LastName { get; }
    private string fullName;
}
class Employee{
    public String FirstName { get; }
        public String LastName { get; }
        public String FullName {
            get{
                return String.Format("{0}, {1}", FirstName, LastName);
            }
        }
    }
}