2009-10-29 79 views
1

假设srIEnumerable<string>,我想使用这样的代码来使用sr.Lines()中的两个项目进行内联计算。问题是lambda是类型“lambda表达式”,而不是十进制数,这是股票期望的。是否有任何方法可以在对象初始值设定项中执行此类型的内联方法?使用匿名方法填充对象初始值设定项中的属性

var trades = 
from line in sr.Lines() 
let items = line.Split('|') 
select new Trade 
     { 
     Total =() => { 
      return Convert.ToDecimal(items[1]) + Convert.ToDecimal(items[2]); 
     }, 
     Name = items[3] 
     } 

回答

4

你想要一个小数表达,而不是一个函数:

var trades = 
from line in sr.Lines() 
let items = line.Split('|') 
select new Trade 
     { 
     Total = Convert.ToDecimal(items[1]) + Convert.ToDecimal(items[2]), 
     Name = items[3] 
     }; 
+0

我应该更具体一些,我只是用它作为我想要做的一个小的,可读的例子。现实情况是,我可能有相对复杂的逻辑来计算每个字段与if或case语句等 – Dan 2009-10-31 13:28:11

+0

然后只是将复杂的逻辑包装在单独的方法中并在初始化中调用它们。或者如果它太长,请不要使用对象初始化语法。 – 2009-10-31 21:05:48

+0

所以你的回答是,不,没有办法做到这一点?我必须使用对象初始值设定语法,因为它是linq查询的一部分。我知道我可以将它封装在一个函数中,但我试图弄清楚是否有某种内联匿名方法。 – Dan 2009-11-02 18:47:56

0

万一别人在这里结束了寻找解决的办法,像我一样。

检查How to call anonymous function in C#?

var trades = 
from line in sr.Lines() 
let items = line.Split('|') 
select new Trade 
    { 
    Total = ((Func<decimal>)(() => 
    { 
     return Convert.ToDecimal(items[1]) + Convert.ToDecimal(items[2]); 
    }))(), 
    Name = items[3] 
    }; 
相关问题