for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Не фоксом единым
   :: Помощь сайту :: 

Добавить элемент в список
S-type

Сообщений: 2331
Дата: 10.07.18 14:21:47ОтветитьЦитировать
Есть такой код:

  
  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

Сообщений: 2331
Дата: 10.07.18 14:45:50ОтветитьЦитировать
Конечно, можно добавить класс с расширением:

  
  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
Автор

Сообщений: 31940
Дата: 10.07.18 15:23:47ОтветитьЦитировать
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

Сообщений: 2331
Дата: 10.07.18 16:01:57ОтветитьЦитировать
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
Автор

Сообщений: 31940
Дата: 10.07.18 17:00:16ОтветитьЦитировать
Любой "изощрённый код" - хороший повод внимательно его обдумать и упростить


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



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

On-line: 34 Taran Mitchman  and Guests: 32


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