Добавить только элемент в виде списка - PullRequest
0 голосов
/ 21 марта 2020
class Nameday
{
    public class Date
    {
        public int mm;
        public int dd;

        public Date(int get_mm, int get_dd)
        {
            mm = get_mm;
            dd = get_dd;
        }
    }

Dictionary<string, List<Date>> name_day = new Dictionary<string, List<Date>>();

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

List<Date> tmp = new List<Date>();
tmp.Add(new Date(10, 14));
name_day.Add(item, tmp);

Он работает нормально, но я хотел бы оставить часть "tmp" на что-то вроде это:

name_day.Add(item, new Date(mm,dd).ToList()); 

Могу ли я сделать это?

Ответы [ 3 ]

1 голос
/ 21 марта 2020

Есть два решения, которые я вижу, чтобы сделать решение oneliner, похожее на то, которое вы ожидаете:

  1. Без дополнительного кода вы можете напрямую создать экземпляр List со своим элементом.

    name_day.Add(item, new List<Date>{new Date(mm,dd)});
    
  2. Или вы можете реализовать метод ToList в Date ... но он довольно бесполезен

    public List<Date> ToList() => new List<Date> { this };
    

    тогда, как вы ожидали

    name_day.Add(item, new Date(mm,dd).ToList()); 
    

    РЕДАКТИРОВАТЬ лучшее решение - использовать расширение метода, как описано в ответе Вейхча

  3. Другой способ - использовать метод расширения на Dictionary

    public static class DictionaryExtensions
    {
        public static void Add(this Dictionary<string, List<Date>> dict,string key, Date date)
        {
            dict.Add(key, new List<Date>{ date });
        }
    }
    
    //...and then use it that way
    name_day.Add(item, new Date(mm,dd)
    
    

    ... и вы также можете добавить код, чтобы проверить, существует ли уже список, соответствующий тому же ключу, и добавить его ....

0 голосов
/ 21 марта 2020

См. Комментарии к этому ответу по причине, почему метод расширения:)

Вы можете создать метод расширения:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

public static class DataExtensions
{
    public static List<Date> ToList(this Date date)
    {
        return new List<Date> { date };
    }
}

Тогда вы можете сделать:

name_day.Add(item, new Date(mm,dd).ToList()); 
0 голосов
/ 21 марта 2020

Да, ToList () должен быть переопределен, чтобы возвращать Список , если он не возвращает то же самое по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...