尝试将任何数组放入方法参数

时间:2019-10-05 13:22:19

标签: c# dictionary generics type-conversion ienumerable

我有一个小问题:我创建了此方法

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));

我应该如何更改代码(输入参数的类型,变量的声明等),以便不仅可以将对象类型变量array放置在其中,而且至少应将chars或ints数组放置在那里

我试图将输入转换为几乎所有内容,但仍然没有找到解决方法

谢谢

1 个答案:

答案 0 :(得分:1)

类似这样的东西:

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类,而不只是一个方法。

另一方面,尽管可以使用例外检查,尽管它可以工作,但它是一种非常昂贵的选择,如果有任何直接的方法,它也是一种反模式。