C# Can';我不懂如何编写函数<;Func<;T1、T2>;,T3>;

C# Can';我不懂如何编写函数<;Func<;T1、T2>;,T3>;,c#,.net,linq,linq-extensions,C#,.net,Linq,Linq Extensions,我有这个方法: public static IQueryable<char> Test(this string text, Func<Func<char, bool>, int> func) 公共静态IQueryable测试(此字符串文本,Func Func) 这里char是要在文本中查找的字符,bool确定是否找到该字符,int返回文本中该字符的索引 我应该如何编写此代码?谢谢。这里有一个例子,可以让您了解它的作用。 我不知道你为什么需要这个,但可能有一

我有这个方法:

public static IQueryable<char> Test(this string text, Func<Func<char, bool>, int> func)
公共静态IQueryable测试(此字符串文本,Func Func)
这里char是要在文本中查找的字符,bool确定是否找到该字符,int返回文本中该字符的索引


我应该如何编写此代码?谢谢。

这里有一个例子,可以让您了解它的作用。
我不知道你为什么需要这个,但可能有一个原因:)

//这些Func接受一个字符并返回一个布尔值。
Func f1=(ch)=>ch='a';
Func f2=(ch)=>ch='b';
char chr='a';
//这个Func接受一个函数(我们在上面看到的类型)并返回一个整数。
Func Func=(foo)=>foo(chr)?1 : 0;
//通过将函数作为输入参数传递并接收整数作为响应来运行复数Func。
int res1=func(f1);//1.
int res2=func(f2);//0
根据您的要求,这里是另一个示例(我仍然找不到好的用法,但不管怎样):

string text=“测试”;
Func IsCapital=ch=>ch==char.ToUpper(ch);
int计数器=0;
foreach(text.ToCharArray()中的字符chr)
{
Func Func=fn=>fn(chr)?1:0;
计数器+=func(IsCapital);
}

func
是一个函数,它接受一个函数并返回一个
int
。该输入函数接受一个
char
并返回一个
bool
谢谢。我明白这一点。但我不明白如何正确地编写代码。我需要一个例子。因为函数中没有字符源,所以很难检测字符索引。似乎
func
的类型必须是
func
func
。我知道我需要的方法比我想要的更多。我试着在一个扩展方法中放了很多东西,应该有一些。非常感谢您的代码和解释。你能给出一个更详细的例子如何使用这个代码吗?@DeividasGrigas-我添加了另一个计算字符串中大写字母的例子。我仍然找不到Func的好用法,但不管怎样..你能帮我更多吗,,,我有以下代码:Func f1=(找到,p)=>新的StringParameters(p.Character,p.Text.IndexOf(p.Character,p.Position)!=-1);动作比较类型=(找到,p)=>f1(找到,p)。位置!=-1.真:假//新参数(p,d))。位置;Func f2=(c,index)=>text.IndexOf(c,comparisonType);有什么问题吗?@DeividasGrigas-您需要添加更多代码。你想在这里做什么?那我再问一个问题。我将在下一篇评论中写下linq。谢谢你的帮助。你在哪里学的linq扩展?你读或看了什么材料?谢谢
    // These Func's take a char and return a boolean value.
    Func<char, bool> f1 = (ch) => ch == 'a';
    Func<char, bool> f2 = (ch) => ch == 'b';

    char chr = 'a';

    // This Func takes a function (of the type we saw above) and returns an integer.
    Func<Func<char, bool>, int> func = (foo) => foo(chr) ? 1 : 0;

    // Run the complex Func by passing a function as an input param and receiving an integer as a response.
    int res1 = func(f1); // 1
    int res2 = func(f2); // 0
    string text = "TesTinG";
    Func<char, bool> IsCapital = ch => ch == char.ToUpper(ch);
    int counter = 0;
    foreach (char chr in text.ToCharArray())
    {
        Func<Func<char, bool>, int> func = fn => fn(chr) ? 1 : 0;
        counter += func(IsCapital);
    }