Как создать список со списком новых объектов - PullRequest
2 голосов
/ 23 марта 2020

Следующий код работает.

List<Card> Cards = new List<Card>()
{
    new Card("SA"), 
    new Card("HA"), 
    new Card("CA"), 
    new Card("DA"), 
    new Card("SK"), 
    new Card("S2"), 
    new Card("D2") 
};

Я хотел бы уменьшить беспорядок, поэтому я ищу что-то вроде этого

List<Card> Cards = new List<Card>() 
{ 
    new Card() 
    { 
        "SA", "HA", "CA", "DA", "SK", "S2", "D2"
    }
};

Клянусь. Я видел это где-то, но я просто не могу определить это правильно, чтобы погуглить ответ.

Ответы [ 4 ]

6 голосов
/ 23 марта 2020

Вы можете попробовать это:

var codes = new string [] { "SA", "HA", "CA", "DA", "SK", "S2", "D2" };
var cards = codes.Select( code => new Card(code) ).ToList();
4 голосов
/ 23 марта 2020

Просто чтобы расширить ответы от других

Если у класса Card есть оператор преобразования типа, такой как:

class Card
{
    public Card(string str)
    { }

    // This one converts string to Card.
    public static implicit operator Card(string str)
    {
        return new Card(str);
    }
}

Тогда вы можете сделать следующее, которое выглядит близко к тому, что вы получили в вопросе:

var list = new List<Card> { "SA", "HA", "CA", "DA", "SK", "S2", "D2" };
1 голос
/ 23 марта 2020

В C# 6 вы можете использовать Расширение Добавить методы в инициализаторах коллекции :

public static class CardListExtensions
{
   public static void Add(this List<Card> list, string name)
   {
      list.Add(new Card(name));
   }
}

После добавления такого метода расширения вы сможете использовать его в инициализаторе коллекции:

List<Card> list = new List<Card> {"SA", "HA", "CA"};
0 голосов
/ 23 марта 2020

Если вы ищете более короткий код, как об этом

"SA_HA_CA_DA_SK_S2_D2".Split("_").Select(x => new Card(x)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...