假设您有以下方法:
public static void TestMe <T>(Action action)
{
List<T> collection = new List<T>();
//Stuff gets added to "collection" here
action(collection);
}
这会产生编译器错误,因为上面没有参数。
但是,我不想要集合的参数,因为这将填入TestMe方法。如果我更正了用法,它看起来像这样:
public static void TestMe <T>(Action<List<T>> action)
{
List<T> collection = new List<T>();
//Stuff gets added to "collection" here
action(collection);
}
但我无法做到这一点,因为当我调用TestMe时,它希望该集合可用作参数。反正有吗?
答案 0 :(得分:0)
让我们测试一下:
public static void TestMe<T>(Action<List<T>> action)
{
List<T> collection = new List<T>();
collection.Add((T)(object)"123"); //I do not know, how you fill the collection
action(collection);
}
您可以使用lamda表达式来指定操作; l
这里只是一个参数:
TestMe<string>(l => l.ForEach(s => Console.WriteLine(s))); //outputs: 123
您可以指定具有必要签名的方法:
public static void Foo<T>(List<T> list)
{
list.ForEach(s => Console.WriteLine(s));
}
然后致电TestMe
:
TestMe<string>(Foo); //outputs: 123
这两个示例都表明您的TestMe
不需要调用List<T>
,并且使用TestMe
方法中指定的集合。