我班上也有这样的电话;
AddConversion<string>(
PropertyHelper<PlayerCreditsBalanceWriter>.GetProperty(x => x.Credits),
i => (long)i + ".0");
如何让它更像这样?
AddConversion<string>(x => x.Credits, i => (long)i + ".0");
并通过将当前类传递到此处来避免冗长的属性 getter 吗?
public static class PropertyHelper<T>
{
public static PropertyInfo GetProperty<TValue>(
Expression<Func<T, TValue>> selector)
{
Expression body = selector;
if (body is LambdaExpression)
{
body = ((LambdaExpression)body).Body;
}
return body.NodeType switch
{
ExpressionType.MemberAccess => (PropertyInfo)((MemberExpression)body).Member,
_ => throw new InvalidOperationException()
};
}
}
这个问题还不清楚,但我会冒险假设作者需要这样的东西
public Func<object, T> AddConversion<T>(Func<object, object> getter, Func<object, T> mapper)
{
return o => mapper(getter(o));
}
可以这样使用:
var conversion = AddConversion(dateTime => ((DateTime)dateTime).Ticks, ticks => (long)ticks + ".0");
Console.WriteLine(conversion(DateTime.UtcNow));