提高性能func <T>进行反思

时间:2019-07-11 18:02:55

标签: .net-core automapper

我目前正在编写一段代码,确定一个字段(所有Type的{​​{1}}和Value,因此我们可以查找特定枚举的翻译。我知道这是相当昂贵的,但是我看不到更好的解决方案。谁知道更合适?

我正在使用自动映射器进行映射。

enum

真的很想知道哪种方法更好。

1 个答案:

答案 0 :(得分:1)

您可以使该方法在enum类型上通用,从而可以按原样传递enum值。

这使得可以通过enum来检索typeof(T)类型,该类型在编译时发生,而selectedEnum.GetType()在运行时发生。

您必须分析这是否会提高性能。

C# 7.3开始,您甚至可以使用通用的Enum约束来保护enum值作为参数传递;例如。 where T : Enum

通过以下方式调用以下方法

ResolveEnumTranslation(detail, context, car.GearType)

private string ResolveEnumTranslation<T>(
     CarDetail carDetail, ResolutionContext context, T selectedEnum
     ) where T : Enum
{
    var typeName = typeof(T).Name;

    if (context.Items.TryGetValue(localeKey, out var locale) && locale is string localeString)
    {
        return carDetail.Country.Translations
            .FirstOrDefault(t =>
                 t.EnumType == typeName
                 && t.EnumValue == Convert.ToInt32(selectedEnum)
                 && string.Equals(t.CountryLocale?.Locale, localeString, StringComparison.OrdinalIgnoreCase)
            )?.TranslatedValue ?? selectedEnum.ToString();
    }

    return selectedEnum.ToString();
}