接受int []和List <int> </int>的方法

时间:2014-11-19 09:09:01

标签: c# .net

问题:编写一个可以同时接受List<int>int[]

的方法声明

我的答案涉及这样的事情:

void TestMethod(object param) // as object is the base class which can accept both int[] and List<int>

但这不是预期的答案,她这么说。

有关该方法签名的任何想法吗?

5 个答案:

答案 0 :(得分:7)

您可以使用int[]List<int>同时执行的IList<int>

void TestMethod(IList<int> ints)

通过这种方式,您仍然可以使用索引器或Count属性(是的,如果将数组转换为CountIList<T>,则数组具有ICollection<T>属性) 。这是两种类型之间最大可能的交集,允许使用for - 循环或其他supported methods进行快速访问。

请注意,即使可以像Add那样调用某些方法,但如果您在运行时使用它,则会在运行时获得NotSuportedException(“Collection具有固定大小”)数组。

答案 1 :(得分:3)

这可能是正确答案:

void TestMethod(IEnumerable<int> list)

答案 2 :(得分:2)

您的方法可能就像这样

private void SomeMethod(IEnumerable<int> values)

答案 3 :(得分:1)

你可以试试这个

 private void TestMethod(dynamic param)
 {
     // Console.Write(param);

     foreach (var item in param)
     {
       Console.Write(item);
     }
}

TestMethod(new int[] { 1, 2, 3 });
TestMethod(new List<string>() { "x","y","y"});

答案 4 :(得分:1)

如何使用Generics:

public static void TestMethod<T>(IEnumerable<T> collection)
{
   foreach(var item in collection)
   {
      Console.WriteLine(item);
   }
}

并像这样使用它:

int[] intArray = {1,2};
List<int> intList = new List<int>() { 1,2,3};
int[] intArray = {1,2};
List<int> intList = new List<int>() { 1,2,3};

TestMethod(intArray);
TestMethod(intList);

string[] stringArray =  { "a","b","c"}
List<string> stringList = new List<string>() { "x","y","y"};

TestMethod(stringArray);
TestMethod(stringList);

现在您可以将任何类型传递给它。