问题:编写一个可以同时接受List<int>
和int[]
我的答案涉及这样的事情:
void TestMethod(object param) // as object is the base class which can accept both int[] and List<int>
但这不是预期的答案,她这么说。
有关该方法签名的任何想法吗?
答案 0 :(得分:7)
您可以使用int[]
和List<int>
同时执行的IList<int>
:
void TestMethod(IList<int> ints)
通过这种方式,您仍然可以使用索引器或Count
属性(是的,如果将数组转换为Count
或IList<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);
现在您可以将任何类型传递给它。