我正在浏览Sam的LINQ Unleashed for C#,并在第7页列出:
匿名类型可以初始化为包含方法,但这些可能只是语言学家感兴趣。
我真的不明白语言学家的评论是否是一个笑话。无论如何,可以在C#
中做这样的事情var obj = new {
Name = "Joe", Weight = 200,
GetAge = new Func<int>(() => { return 43; })
};
有没有人有真实生活情况需要在匿名类型中定义一个函数?或者这只是类型推理的结果而没有实际应用?
答案 0 :(得分:2)
我会说它更像是Func<T>
类型的属性而不是方法。在标准类型声明中,它将具有以下形式:
private Func<decimal> myFunc;
public Func<decimal> MyFunc
{
get
{
return myFunc;
}
}
并且用法将是您需要动态调整结果到当前值的任何函数。只有匿名类型才能暂时对数据进行分组,而实际上并不需要实现新类型。
例如,假设我正在循环访问某些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;
}),
};