Linq-Like扩展用于创建新对象并设置其属性?如何?

时间:2017-05-26 15:43:11

标签: c# linq func

我正在尝试为类型对象创建一个扩展方法,它将创建一种初始化对象并设置其属性的新方法。然而,我遇到了一些问题。扩展名如下:

public static class ObjectExtension
{
    public static TResult Select<TSource,TResult>(this TSource obj, Func<TSource, TResult> selector)
    {

        return selector.Invoke(obj);
    }
}

这就是我正在寻找的结果:

return new Product().Select(p => p.Category = new Category(), p.Name = "something");

你可能会说,也许我的理解太少了。我无法理解Func的想法以及如何使用它们。我的问题是,如果这是可能的,我需要如何/以什么方向去实现这个目标?

我的灵感来自于:Here

使用以下代码:

IEnumerable<int> squares =
Enumerable.Range(1, 10).Select(x => x * x);

除了列表之外,我想做类似的事情,并且能够设置多个属性。

1 个答案:

答案 0 :(得分:1)

这将修复您的代码:

    return new Product().Select(p => 
             { p.Category = new Category(); p.Name = "something"; return p;});

你的问题是“逗号作为函数参数分隔符”优先于“逗号作为C中的一种奇怪的连接表达式,无论如何都不能在C#中工作”。你需要那里的完整块lambda表达式。

但正如Ed Plunkett在评论中指出的那样,这可以简化为:

return new Product {Category = new Category(), Name = "something"};