将当前类传递给泛型更容易?

问题描述 投票:0回答:1

我班上也有这样的电话;

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()
        };
    }
}
c#
1个回答
0
投票

这个问题还不清楚,但我会冒险假设作者需要这样的东西

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));
© www.soinside.com 2019 - 2024. All rights reserved.