mas*_*rur 10 c# linq lambda anonymous-types
我正在浏览Sam的LINQ Unleashed for C#,并在第7页列出:
匿名类型可以初始化为包含方法,但这些可能只是语言学家感兴趣的.
我真的不明白语言学家的评论是否是一个笑话.无论如何,可以在C#中做这样的事情
var obj = new {
Name = "Joe", Weight = 200,
GetAge = new Func<int>(() => { return 43; })
};
Run Code Online (Sandbox Code Playgroud)
有没有人有真实生活情况需要在匿名类型中定义一个函数?或者这只是类型推理的结果而没有实际应用?
我想说它更多的是类型的属性Func<T>
而不是方法。在标准类型声明中,它将具有以下形式:
private Func<decimal> myFunc;
public Func<decimal> MyFunc
{
get
{
return myFunc;
}
}
Run Code Online (Sandbox Code Playgroud)
其用法与您需要将结果动态调整为当前值的任何函数一样。仅使用匿名类型,您只需临时对数据进行分组,并不真正需要实现新类型来做到这一点。
例如,假设我正在循环处理一些servicePayments
集合,并且我想要获得一些付款以及客户支付的总付款值。这里计算一下TotalPayedByCustomer
我可以使用Func
. 我无法在任何其他类型的财产中做到这一点。下面是这种假设类型的一些代码。
var payment =
new
{
Gross = gross,
Tax = taxAmount,
Commission = commAmount,
TotalPayedByCustomer = new Func<decimal>(
() =>
{
var totalPayed = 0m;
foreach (var custPay in customerPayments)
{
if (custPay.Payed)
{
totalPayed += custPay.Amount;
}
}
return totalPayed;
}),
};
Run Code Online (Sandbox Code Playgroud)