我想对列表的成员进行自定义操作,并能够指定我将在哪个属性上执行它,但我很难找到将结果分配回属性的正确语法。
例子 :
我有一个术语列表,例如下面的术语,并希望将它们的“频率”标准化。
public class Term
{
public string Name { get; set; }
public double Frequency { get; set; }
public double Weight { get; set; }
}
使用类似这样的语法,我应该能够指定我正在执行操作的属性:
List<Term> list = Normalize(artist.Terms, s => s.Frequency);
(这里是“期限”上的“频率”,但我应该能够对任何类型的任何属性执行此操作,属性类型将始终为双精度)
这就是我精心设计的,但我不知道如何执行操作,也不知道如何将结果分配回属性:
private static List<T> Normalize<T>(List<T> elements, Func<T, double> func)
{
List<T> list = new List<T>();
double fMin = elements.Min(func);
double fMax = elements.Max(func);
double fDelta = fMax - fMin;
double fInv = 1.0d / fDelta;
for (int i = 0; i < elements.Count; i++)
{
T t = elements[i];
// What should I do from here ?
//double invoke = func.Invoke(term);
//term.Frequency = (term.Frequency - fMin) * fInv;
}
return list;
}
您将如何实现这一目标?