在参数中传递 Anon 函数以供 Select 使用
本文关键字:Select 使用 函数 Anon 参数 | 更新日期: 2023-09-27 18:35:27
如何在 select 语句中传递要在参数中运行的 anon 函数?
public IEnumerable<string> Tokenize(Func<string> tokenFunc = null)
{
IEnumerable<string> tokens = Regex.Split(INPUT, @"('d+|&|'||'(|'))").Where(x => string.IsNullOrEmpty(x) == false);
if (tokenFunc != null)
{
tokens = tokens.Select(tokenFunc);
}
}
我收到错误:
方法"Enumerable.Select(IEnumerable, Func)"的类型参数无法从用法中推断出来。尝试显式指定类型参数
我做错了什么?
我想这样称呼它:
MyViewObj.Tokenize( (x) => { if(x=='1') return 1; else return 0; });
问题出在您的tokenFunc
它应该是 Func<TSource, TResult>
类型并且您正在提供 Func<TResult>
.
天真地,看看你怎么称呼它,它应该变成:
public IEnumerable<string> Tokenize(Func<string, int> tokenFunc = null)
{
IEnumerable<string> tokens = Regex.Split(INPUT, @"('d+|&|'||'(|'))").Where(x => string.IsNullOrEmpty(x) == false);
if (tokenFunc != null)
{
tokens = tokens.Select(tokenFunc);
}
}
但这当然会失败,因为您尝试将结果分配给IEnumerable<string>
但实际上返回了IEnumerable<int>
要使这一切协同工作,您需要将内容更改为Func<string, string>
并返回"0"
或"1"
,而不是在通话中0
或1
:
public IEnumerable<string> Tokenize(Func<string, string> tokenFunc = null)
{
IEnumerable<string> tokens = Regex.Split(INPUT, @"('d+|&|'||'(|'))").Where(x => string.IsNullOrEmpty(x) == false);
if (tokenFunc != null)
{
tokens = tokens.Select(tokenFunc);
}
}
并将调用代码更改为:
MyViewObj.Tokenize( (x) => { if(x=="1") return "1"; else return "0"; });
因为您需要一个将字符串作为输入并返回返回类型的 Func:
Func<string,int> tokenFunc