将参数传递给方法并分配给类型 Func<bool>
Passing parameter to a method and assigning to type Func<bool>
我目前有一个类似这样的方法
public static bool test(string str);
我想把这个方法分配给这个类型
Func<bool> callback
我正在尝试这样做(这是不正确的)
callback = test("Str");
以上内容不正确,因为我正在调用方法的 C# 内容。我如何告诉它使用参数 Str 调用该方法?在 C++ 中我们可以这样做
std::function<...,..,"str">
我们如何在 C# 中做类似的事情?
您应该将函数声明为:
Func<string, bool> callback
表示它引用的方法消耗一个string
和returns一个bool
.
然后你可以稍后做:
callback = s => test(s);
或内联:
Func<string, bool> callback = s => test(s);
如果您的目标是始终使用相同的字符串参数调用回调(而不是每次都使用不同的参数),您可以这样声明它:
Func<bool> callback = () => test("Str");
var result = callback();
但是如果您打算每次都传递不同的字符串值,那么您需要 Func<string, bool>
:
Func<string, bool> callback = s => test(s);
var result = callback("Str");
让我看看我是否知道你在说什么。在 C++ 中,我们有 'function pointers' 并且它们是用特定的签名声明的。要在 C# 中使用 delegate 关键字进行等效操作。
这是一个快速的功能代码示例:
class DelegateExample
{
// A delegate is a prototype for a function signature.
// Similar to a function pointer in C++.
delegate bool MyDelegate(string[] strings);
// A method that has that signature.
bool ListStrings(string[] strings)
{
foreach (var item in strings)
{
Console.WriteLine(item);
}
return strings.Length > 0; // ... for example
}
// Different method, same signature.
bool Join(string[] strings)
{
Console.WriteLine(string.Join(", ", strings));
return strings.Length > 0; // ... for example
}
public void TryIt()
{
string[] testData = { "Apple", "Orange", "Grape" };
// Think of this as a list of function pointers...
List<MyDelegate> functions = new List<MyDelegate>();
functions.Add(ListStrings); // This one points to the ListStrings method
functions.Add(Join); // This one points to the Join method
foreach (var function in functions)
{
bool returnVal = function(testData);
Console.WriteLine("The method returned " + returnVal + Environment.NewLine);
}
}
}
您可以 运行 控制台应用程序中的示例,如下所示:
class Program
{
static void Main(string[] args)
{
new DelegateExample().TryIt();
Console.ReadKey();
}
}
这给出了这个输出:
Apple
Orange
Grape
The method returned True
Apple, Orange, Grape
The method returned True
希望对您有所帮助!
我目前有一个类似这样的方法
public static bool test(string str);
我想把这个方法分配给这个类型
Func<bool> callback
我正在尝试这样做(这是不正确的)
callback = test("Str");
以上内容不正确,因为我正在调用方法的 C# 内容。我如何告诉它使用参数 Str 调用该方法?在 C++ 中我们可以这样做
std::function<...,..,"str">
我们如何在 C# 中做类似的事情?
您应该将函数声明为:
Func<string, bool> callback
表示它引用的方法消耗一个string
和returns一个bool
.
然后你可以稍后做:
callback = s => test(s);
或内联:
Func<string, bool> callback = s => test(s);
如果您的目标是始终使用相同的字符串参数调用回调(而不是每次都使用不同的参数),您可以这样声明它:
Func<bool> callback = () => test("Str");
var result = callback();
但是如果您打算每次都传递不同的字符串值,那么您需要 Func<string, bool>
:
Func<string, bool> callback = s => test(s);
var result = callback("Str");
让我看看我是否知道你在说什么。在 C++ 中,我们有 'function pointers' 并且它们是用特定的签名声明的。要在 C# 中使用 delegate 关键字进行等效操作。
这是一个快速的功能代码示例:
class DelegateExample
{
// A delegate is a prototype for a function signature.
// Similar to a function pointer in C++.
delegate bool MyDelegate(string[] strings);
// A method that has that signature.
bool ListStrings(string[] strings)
{
foreach (var item in strings)
{
Console.WriteLine(item);
}
return strings.Length > 0; // ... for example
}
// Different method, same signature.
bool Join(string[] strings)
{
Console.WriteLine(string.Join(", ", strings));
return strings.Length > 0; // ... for example
}
public void TryIt()
{
string[] testData = { "Apple", "Orange", "Grape" };
// Think of this as a list of function pointers...
List<MyDelegate> functions = new List<MyDelegate>();
functions.Add(ListStrings); // This one points to the ListStrings method
functions.Add(Join); // This one points to the Join method
foreach (var function in functions)
{
bool returnVal = function(testData);
Console.WriteLine("The method returned " + returnVal + Environment.NewLine);
}
}
}
您可以 运行 控制台应用程序中的示例,如下所示:
class Program
{
static void Main(string[] args)
{
new DelegateExample().TryIt();
Console.ReadKey();
}
}
这给出了这个输出:
Apple
Orange
Grape
The method returned True
Apple, Orange, Grape
The method returned True
希望对您有所帮助!