使用带参数的动作,但在调用方法中提供参数

时间:2013-11-20 00:16:23

标签: c# c#-4.0 action func

假设您有以下方法:

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时,它希望该集合可用作参数。反正有吗?

1 个答案:

答案 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);
}
  1. 您可以使用lamda表达式来指定操作; l这里只是一个参数:

    TestMe<string>(l => l.ForEach(s => Console.WriteLine(s))); //outputs: 123
    
  2. 您可以指定具有必要签名的方法:

    public static void Foo<T>(List<T> list)
    {
        list.ForEach(s => Console.WriteLine(s));
    }
    

    然后致电TestMe

    TestMe<string>(Foo);     //outputs: 123
    
  3. 这两个示例都表明您的TestMe不需要调用List<T>,并且使用TestMe方法中指定的集合。