通过匿名方法分配匿名类型的属性

Gar*_*Guy 14 c# lambda anonymous-methods anonymous-types

我是C#功能方面的新手,对不起,如果这个问题很蹩脚的话.

鉴于以下错误代码:

var jobSummaries = from job in jobs
                   where ...
                   select new 
                   {
                        ID = job.ID,
                        Description = job.Description,
                        FileName = (job) => {
                                  // primitive logic not 
                                  // worth to become a named method
                                  try { return job.Files[0].LocalName); }
                                  catch { return null as string; }
                                 }
                   };
Run Code Online (Sandbox Code Playgroud)

此代码生成以下合理的编译器错误:

无法将lambda表达式赋给匿名类型属性

上面的代码将委托设置为FileName属性.但这不是我的目标.我希望代码像这样工作,但没有命名方法:

var jobSummaries = from job in jobs
                   where ...
                   select new 
                   {
                        ID = job.ID,
                        Description = job.Description,
                        FileName = this.ExtractFileName(job)
                   };

...
private string ExtractFileName(Job job)
{
     try { return Path.GetFileName(job.Files[0].LocalName); }
     catch { return null as string; }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Jen*_*ens 16

要直接调用匿名函数,这可以:

int result = new Func<int, int>( (int i) =>{ return i + 5; } ).Invoke(3);
// result = 8
Run Code Online (Sandbox Code Playgroud)

但我同意,int result = (i => i + 5)(3);会更冷酷=)