我的代码中有一个Func,声明如下:
Func<string, int, bool> Filter { get; set; }
我如何才能到达作为Func参数的字符串和int变量,以便在我的代码中使用它们?
答案 0 :(得分:4)
当调用函数时,只有存在的参数...并且它们仅在函数内可用。例如:
foo.Filter = (text, length) => text.Length > length;
bool longer = foo.Filter("yes this is long", 5);
这里,值“是这个很长”是委托执行时text
参数的值,同样值5是{{1}的值参数正在执行。在其他时候,这是一个毫无意义的概念。
你真正想要实现的目标是什么?如果你能给我们更多的背景,我们几乎可以肯定会帮助你更好。
答案 1 :(得分:4)
您可以使用匿名方法:
Filter = (string s, int i) => {
// use s and i here and return a boolean
};
或标准方法:
public bool Foo(string s, int i)
{
// use s and i here and return a boolean
}
然后您可以将Filter属性分配给此方法:
Filter = Foo;
答案 2 :(得分:1)
请在此处查看此示例 - http://www.dotnetperls.com/func
using System;
class Program
{
static void Main()
{
//
// Create a Func instance that has one parameter and one return value.
// ... Parameter is an integer, result value is a string.
//
Func<int, string> func1 = (x) => string.Format("string = {0}", x);
//
// Func instance with two parameters and one result.
// ... Receives bool and int, returns string.
//
Func<bool, int, string> func2 = (b, x) =>
string.Format("string = {0} and {1}", b, x);
//
// Func instance that has no parameters and one result value.
//
Func<double> func3 = () => Math.PI / 2;
//
// Call the Invoke instance method on the anonymous functions.
//
Console.WriteLine(func1.Invoke(5));
Console.WriteLine(func2.Invoke(true, 10));
Console.WriteLine(func3.Invoke());
}
}