Я думаю, вы ищете что-то вроде фабричного образца. Вы можете сделать это примерно так:
public class MyTranslatingType
{
// A dictionary of methods to get the relevant type
private static Dictionary<string, Func<MyTranslatingType>> _typeFactory =
new Dictionary<string, System.Func<MyModelClass.MyTranslatingType>>
{
{ nameof(FirstType), () => new MyTranslatingType(nameof(FirstType)) },
{ nameof(SecondType), () => new MyTranslatingType(nameof(SecondType)) },
{ nameof(ThirdType), () => new MyTranslatingType(nameof(ThirdType)) },
};
// Method to get the type required
public static MyTranslatingType GetMyTranslatingType(string type)
{
if (_typeFactory.TryGetValue(type, out var getType))
{
return getType();
}
throw new ArgumentOutOfRangeException(nameof(type), $"Cannot get type for {type}");
}
}
И вы используете это так:
var myType = MyModelClass.MyTranslatingType.GetMyTranslatingType("FirstType");
Этот метод чище, чем ваш, так как у нас больше нет кучки публикаций c stati c методы для получения типов.
Вот полная версия, использующая const
s вместо свойств:
public class MyTranslatingType
{
private const string FirstType = "FirstType";
private const string SecondType = "SecondType";
private const string ThirdType = "ThirdType";
private MyTranslatingType(string value) { Value = value; }
public string Value { get; set; }
// A dictionary of methods to get the relevant type
private static Dictionary<string, Func<MyTranslatingType>> _typeFactory =
new Dictionary<string, System.Func<MyModelClass.MyTranslatingType>>
{
{ FirstType, () => new MyTranslatingType(FirstType) },
{ SecondType, () => new MyTranslatingType(SecondType) },
{ ThirdType, () => new MyTranslatingType(ThirdType) },
};
// Method to get the type required
public static MyTranslatingType GetMyTranslatingType(string type)
{
if (_typeFactory.TryGetValue(type, out var getType))
{
return getType();
}
throw new ArgumentOutOfRangeException(nameof(type), $"Cannot get type for {type}");
}
}