У меня есть следующая строка в конвертер enum:
public static T ParseString<T>(string stringValue) where T : struct
{
if (!string.IsNullOrWhiteSpace(stringValue))
{
stringValue = stringValue.Replace(" ", "_");
T result;
if (Enum.TryParse<T>(stringValue, out result))
{
return result;
}
}
return default(T);
}
, которую я использую в нескольких конвертерах автоматов:
public sealed class StringToGuaranteeTypeConverter : ITypeConverter<string, GuaranteeType>
{
public GuaranteeType Convert(string source, GuaranteeType destination, ResolutionContext context)
{
return EnumExtensions.ParseString<GuaranteeType>(source);
}
}
public sealed class StringToWhyChooseTypeConverter : ITypeConverter<string, WhyChooseType>
{
public WhyChooseType Convert(string source, WhyChooseType destination, ResolutionContext context)
{
return EnumExtensions.ParseString<WhyChooseType>(source);
}
}
Есть ли способ создать общий enumконвертер для автомаппера вместо того, чтобы создавать одно и то же для каждого перечисления, которое мне нужно конвертировать?
Я надеялся на что-то вроде:
public sealed class StringToEnumConverter : ITypeConverter<string, T> // this line fails as it does not know what T is here
{
public T Convert<T>(string source, T destination, ResolutionContext context)
{
return EnumExtensions.ParseString<T>(source);
}
}
Но мои знания о том, какиспользование T
довольно ограничено, так что, очевидно, это не работает.Возможно ли это даже с унаследованным классом?