:: Не фоксом единым
Добавить элемент в список
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Есть такой код:

public class MyClass
{
public string Text { get; set; }
public string Value { get; set; }
}
class Program
{
public static List<MyClass> Create()
{
List<MyClass> myClass = new List<MyClass>() { new MyClass { Text = "один", Value = "1" } };
return myClass;
}
static void Main(string[] args)
{
foreach(var i in Create())
{
Console.WriteLine(i.Text);
}
Console.Read();
}
}

Всё работает как надо. Понадобилось внести изменение в Create:

public static List<MyClass> Create()
{
List<MyClass> myClass = new List<MyClass>() { new MyClass { Text = "один", Value = "1" } };
MyClass myClass2 = new MyClass { Text = "два", Value = "2" };
myClass.Add(myClass2);
return myClass;
}

Тоже работает как надо. Но, вот не нравиться (чисто субъективно), что в две строчки. Хотелось бы сделать что то типа:

return myClass.Add(myClass2);

Но, так нельзя Add возвращает void. В одну строчку получается так:

return (List<MyClass> )myClass.Concat(new List<MyClass>() { myClass2 });

IMHO, это жутко не красиво - много лишних движений. Есть какие то варианты покрасивей?
Ratings: 0 negative/0 positive
Добавить элемент в список
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Конечно, можно добавить класс с расширением:

public static class MyExtensions
{
public static List<MyClass> AddItem(this List<MyClass> list, MyClass myClass)
{
list.Add(myClass);
return list;
}
}

Тогда можно:

return myClass.AddItem(myClass2);

Как то не хочется создавать целый класс. Есть ещё варианты?
Ratings: 0 negative/0 positive
Re: Добавить элемент в список
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
return new List<MyClass> myClass = new List<MyClass>()
{
new MyClass { Text = "один", Value = "1" },
new MyClass { Text = "два", Value = "2" }
};

Но IMHO лучше так:
...
public static IList<MyClass> Create()
{
return new MyClassList()
{
{ "один", "1" },
{ "два", "2" }
};
}
}
public class MyClassList : List<MyClass>
{
public void Add(string text, string value)
{
Add(new MyClass(text, value));
}
}
public class MyClass
{
public MyClass(string text, string value)
{
Text = text;
Value = value;
}
public string Text { get; protected set; }
public string Value { get; protected set; }
}

Конечно, если хочется странного, то можно и цепочку методов использовать:

...
public static IList<MyClass> Create()
{
return new MyClassList().Add("один", "1").Add("два", "2");
}
}
public class MyClassList : List<MyClass>
{
public MyClassList Add(string text, string value)
{
Add(new MyClass(text, value));
return this;
}
}
...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Добавить элемент в список
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
return new List<MyClass> myClass = new List<MyClass>()
{
new MyClass { Text = "один", Value = "1" },
new MyClass { Text = "два", Value = "2" }
};

Так не получится - в реальном коде список myClass формируется очень изощрённым способом.

Igor Korolyov
Конечно, если хочется странного, то можно и цепочку методов использовать:

Понятно, применить Cascade pattern для создания method chaining.




В общем, если в одну строчку нельзя - оставлю в две.
Ratings: 0 negative/0 positive
Re: Добавить элемент в список
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Любой "изощрённый код" - хороший повод внимательно его обдумать и упростить


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 6 tata Guest (Гостей: 4)

© 2000-2024 Fox Club 
Яндекс.Метрика