繁体   English   中英

功能 <TIn, TResult> 在通用LINQ上

[英]Func<TIn, TResult> On generic linq

我有一个字符串列表。

List<string> myData = new List<string>
            {
                "abcdefghi1",
                "abcdefghi2"
                "abcdefghi3"
            };

如果我手动制作以下LINQ,则效果很好。

var myObjectList = (from s in myData 
                    select new myObject
                    {
                        Prop1 = s.Substring(0,3),
                        Prop2 = s.Substring(4,1)...
                    }).ToList();

当我检查“选择新的myObject”类型时,它是Func<string, T>

如果创建跟随方法

List<T> getMyObjects(List<string> myData, Func<string, T> selector) where T : class 
{
    return (from s in myData select selector).ToList();
}

并称它为

var myObjectList = getMyObjects(data, 
                      value => new myObject 
                      {
                        Prop1 = value.Substring(0,3),
                        Prop2 = value.Substring(4,1)
                      });

它返回{System.Func<string, MyObject>}的列表,而不是

关于如何做到这一点的任何想法吗?

您选择的是映射功能,而不是使用它进行映射的结果。

List<T> getMyObjects(List<string> myData, Func<string, T> selector) where T : class 
{
    return (from s in myData select selector).ToList();
}

应该是

List<T> getMyObjects(List<string> myData, Func<string, T> selector) where T : class 
{
    return (from s in myData select selector(s)).ToList();
    //                                      ^^^ get the result of your selector delegate against the string.
}

@Camilo Terevinto指出,可以将其进一步简化为:

List<T> getMyObjects(List<string> myData, Func<string, T> selector) where T : class 
{
    return myData.Select(selector).ToList();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM