如何在对象初始值设定项中使用Console.Write?

时间:2016-05-04 04:37:35

标签: c# .net object-initializers

当我在对象初始化程序中使用Console.Write时,我收到此错误

  

错误CS0747初始化程序成员声明符无效

person[i] = new Karmand()
            {
                Console.Write("first name:"),
                FirstName = Console.ReadLine(),
                LastName = Console.ReadLine(),
                ID = Convert.ToInt32(Console.ReadLine()),
                Hoghoogh = Convert.ToDouble(Console.ReadLine())
            };

2 个答案:

答案 0 :(得分:6)

您无法,因为Console.Write不是Karmand的可访问媒体资源或字段。您只能在object initializers中设置类属性和字段的值。

您的代码是下面代码的语法糖(a little bit different)。

var person[i] = new Karmand();
// what do you expect to do with Console.Write here?
person[i].FirstName = Console.ReadLine();
person[i].LastName = Console.ReadLine();
person[i].ID = Convert.ToInt32(Console.ReadLine());
person[i].Hoghoogh = Convert.ToDouble(Console.ReadLine());

如果需要,您可以在Karmand类中创建一个构造函数来打印它。

public class Karmand
{
    public Karmand(bool printFirstName = false)
    {
        if (printFirstName)
            Console.Write("first name:");
    }

    // rest of class code
}

然后像

一样使用它
person[i] = new Karmand(printFirstName: true)
            {
                FirstName = Console.ReadLine(),
                LastName = Console.ReadLine(),
                ID = Convert.ToInt32(Console.ReadLine()),
                Hoghoogh = Convert.ToDouble(Console.ReadLine())
            };

答案 1 :(得分:1)

尝试删除Console.Write("first name:")Console.Writeline不是对属性或字段的赋值。

来自MSDN

  

对象初始值设定项用于为属性或值分配值   领域。任何不是属性或属性赋值的表达式   field是编译时错误。

     

纠正此错误确保全部   初始值设定项中的表达式是属性或字段的赋值   这种类型。

<强>更新
如果您需要使用Console.Writeline,请在对象初始值设定项之前使用它,如

Console.Writeline("first name:");
{ person[i] = new Karmand()
            {
                FirstName = Console.ReadLine(),
                LastName = Console.ReadLine(),
                ID = Convert.ToInt32(Console.ReadLine()),
                Hoghoogh = Convert.ToDouble(Console.ReadLine())
            };