我正在尝试为类型对象创建一个扩展方法,它将创建一种初始化对象并设置其属性的新方法。然而,我遇到了一些问题。扩展名如下:
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);
除了列表之外,我想做类似的事情,并且能够设置多个属性。
答案 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"};