В других ответах этот вопрос уже описан более четко, но для полноты изложения здесь используется подход x-macro, если вы хотите пойти по этому пути и рискнуть яростью своего коллеги.
X-макросы - это форма генерации кода, использующая встроенный препроцессор Си. Цель состоит в том, чтобы свести повторение к минимуму, хотя и с некоторыми недостатками:
Вы начинаете с создания списка вызовов макро в отдельном файле, например, elements.inc
, не определяя, что на самом деле делает макрос в этот момент:
// elements.inc
// each row passes a set of parameters to the macro,
// although at this point we haven't defined what the
// macro will output
XMACRO(TOTO, 18, French)
XMACRO(TITI, 27, English)
XMACRO(TATA, 45, Spanish)
И затем вы определяете макрос каждый раз, когда вам нужно включить этот список, чтобы каждый вызов отображался в одной строке конструкция, которую вы хотите создать - и вы обычно повторяете это несколько раз подряд, т.е.
// concatenate id with "_IND" to create enums, ignore code and description
// (notice how you don't need to use all parameters each time)
// e.g. XMACRO(TOTO, 18, French) => TOTO_IND,
#define XMACRO(id, code, description) id ## _IND,
typedef enum
{
# include "elements.inc"
ELEMENTS_COUNT
}
Elements;
#undef XMACRO
// create struct entries
// e.g. XMACRO(TOTO, 18, French) => [TOTO_IND] = { "TOTO", 18, "French" },
#define XMACRO(id, code, description) [id ## _IND] = { #id, code, #description },
const MyElements elems[] = {
{
# include "elements.inc"
};
#undef XMACRO
Что будет предварительно обработано во что-то вроде:
typedef enum
{
TOTO_IND,
TITI_IND,
TATA_IND,
ELEMENTS_COUNT
}
Elements;
const MyElements elems[] = {
{
[TOTO_IND] = { "TOTO", 18, "French" },
[TITI_IND] = { "TITI", 27, "English" },
[TATA_IND] = { "TATA", 45, "Spanish" },
};
Очевидно, что частое обслуживание списка становится проще, за счет того, что генерирующий код становится более запутанным.
Проблема в строке
List<Customer> li = List<Customer>();
, вам нужно добавить «новый»
List<Customer> li = new List<Customer>();
Дополнительно для следующей строки должно быть:
li.Add(new Customer{Name="yusuf", SurName="karatoprak", Number="123456"});
EDIT: Если вы используете VS2005 , то вам нужно создать новый конструктор, который принимает 3 параметра.
public Customer(string name, string surname, string number)
{
this.name = name;
this.surname = surname;
this.number = number;
}
Это
List<Customer> li = List<Customer>();
должно быть:
List<Customer> li = new List<Customer>();
, и вам нужно создать конструктор Customer, который принимает 3 аргумента, которые вы хотите передать. Конструктор Customer по умолчанию не принимает аргументов.
To answer your second question:
You either need to create a constructor that takes the three arguments:
public Customer(string a_name, string a_surname, string a_number)
{
Name = a_name;
SurName = a_surname;
Number = a_number;
}
or set the values after the object has been created:
Customer customer = new Customer();
customer.Name = "yusuf";
customer.SurName = "karatoprak";
customer.Number = "123456";
li.Add(customer);
Поскольку все свойства в классе Customer
имеют общедоступные сеттеры, у вас совершенно нет для создания конструктора (как предлагали многие). У вас также есть альтернатива - использовать конструктор без параметров по умолчанию и установить свойства объекта:
Customer c = new Customer();
c.Name = "yusuf";
c.SurName = "karatoprak";
c.Number = "123456";
li.Add(c);