Попытка поместить массив чего-либо в параметр метода - PullRequest
1 голос
/ 05 октября 2019

У меня небольшая проблема: я создал этот метод

private static Dictionary<object, int> StuffToDictionary(IEnumerable<object> input) 
{ 
    var dict = new Dictionary<object, int>();

    foreach (var word in input)
    {
        try
        {
            dict.Add(word, 1);
        }
        catch (ArgumentException)
        {
            dict[word]++;
        }
    }

    return dict;
}

, и переменная, вызывающая этот метод //, еще не работает;)

var input = args[0];
Console.WriteLine("Character frequencies:\n" + StuffToDictionary(input));

Как мне изменить свой код (тип входного параметра, объявление переменной или что-то еще), поэтому я могу поместить туда, по крайней мере, массив символов или целых чисел, а не только переменные типов объектов. массив

Я пытался преобразовать ввод почти во все, но все еще не нашел решения

Спасибо

1 Ответ

1 голос
/ 05 октября 2019

Примерно так:

private static Dictionary<T, int> StuffToDictionary<T>(IEnumerable<T> input) 
{
    var dict = new Dictionary<T, int>();

  foreach (var key in input)
  {
    if (dict.ContainsKey(key)) 
    {
        dict[key]++;
    }
    else
    {
        dict[key]=1;
    }
  }

  return dict;
}

Однако вы не сможете использовать его в WriteLine и прочее, поскольку оно не имеет значимого переопределения ToString. Если вам нужны такие вещи, вам лучше создать специализированный класс StuffDictionary, а не просто метод.

С другой стороны, вы не должны использовать исключения для таких проверок, хотя это работает, это очень дорогая альтернативаи антипаттерн, если есть какой-либо прямой подход.

...