When I use Console.Write
in object initializer I get this error
Error CS0747 Invalid initializer member declarator
You can't because Console.Write
is not an accessible property or field of Karmand
. You can only set values of class properties and fields in object initializers.
Your code is a syntactic sugar (a little bit different) for the code below.
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());
You can have a constructor inside Karmand
class to print that for you if you want.
public class Karmand
{
public Karmand(bool printFirstName = false)
{
if (printFirstName)
Console.Write("first name:");
}
// rest of class code
}
and then use it like
person[i] = new Karmand(printFirstName: true)
{
FirstName = Console.ReadLine(),
LastName = Console.ReadLine(),
ID = Convert.ToInt32(Console.ReadLine()),
Hoghoogh = Convert.ToDouble(Console.ReadLine())
};
Try removing Console.Write("first name:")
. Console.Writeline
is not an assignment to a property or a field.
From MSDN
An object initializer is used to assign values to properties or fields. Any expression which is not an assignment to a property or field is a compile-time error.
To correct this error Ensure that all expressions in the initializer are assignments to properties or fields of the type.
Update:
If you need to use Console.Writeline, then use it before the object initializer like
Console.Writeline("first name:");
{ person[i] = new Karmand()
{
FirstName = Console.ReadLine(),
LastName = Console.ReadLine(),
ID = Convert.ToInt32(Console.ReadLine()),
Hoghoogh = Convert.ToDouble(Console.ReadLine())
};