Witam. Tworze sobie słowniki enumeratorów i stwierdziłem, że bardzo wygodnie będzie je opakować w dwie metody:
- Pobieranie tłumaczenia wartości tekstowej dla wartości
enum
- Pobieranie listy wszystkich wartości
enum
wraz z ich tekstowymi odpowiednikami
public interface IEnumTranslationService
{
string TranslateEnum<T>(T value);
Dictionary<T, string> GetValues<T>();
}
Dla pierwszego zrobiłem coś takiego:
public string TranslateEnum<T>(T value)
{
Type t = value.GetType();
if (t == typeof(eTypeOfDrive))
return TypeOfDriveNames[Enum.Parse<eTypeOfDrive>(value.ToString())];
if (t == typeof(eVehicleMarkingType))
return VehicleMarkingTypeNames[Enum.Parse<eVehicleMarkingType>(value.ToString())];
if (t == typeof(eFuelType))
return FuelTypeNames[Enum.Parse<eFuelType>(value.ToString())];
if (t == typeof(eUnitOfFuel))
return UnitOfFuelNames[Enum.Parse<eUnitOfFuel>(value.ToString())];
if (t == typeof(eOdometerUnit))
return OdometerUnitNames[Enum.Parse<eOdometerUnit>(value.ToString())];
throw new NotImplementedException("Nie znaleziono słownika dla podanego typu");
}
jednak mam problem z zaimplementowaniem drugiej metody, ponieważ jak poprawnie wykryć typ i zwrócić odpowiedni słownik. Pomoglibyście?
public Dictionary<eTypeOfDrive, string> TypeOfDriveNames = new Dictionary<eTypeOfDrive, string>()
{
{ eTypeOfDrive.Petrol, "Benzyna" },
{ eTypeOfDrive.Diesel, "Diesel" },
};
public Dictionary<eVehicleMarkingType, string> VehicleMarkingTypeNames = new Dictionary<eVehicleMarkingType, string>()
{
{ eVehicleMarkingType.NotMarked, "Nieoznakowany" },
{ eVehicleMarkingType.Marked, "Oznakowany" },
};
public Dictionary<eFuelType, string> FuelTypeNames = new Dictionary<eFuelType, string>()
{
{ eFuelType.Petrol, "Benzyna" },
{ eFuelType.Diesel, "Diesel" },
{ eFuelType.Hybrid, "Hybryda" },
{ eFuelType.Electric, "Elektryk" },
{ eFuelType.Gas, "Gaz" },
};
public Dictionary<eUnitOfFuel, string> UnitOfFuelNames = new Dictionary<eUnitOfFuel, string>()
{
{ eUnitOfFuel.Liters, "Litry" },
{ eUnitOfFuel.Kilograms, "Kilogramy" },
{ eUnitOfFuel.CubicDecimeters, "Decymetry sześcienne" },
};
public Dictionary<eOdometerUnit, string> OdometerUnitNames = new Dictionary<eOdometerUnit, string>()
{
{ eOdometerUnit.Kilometers, "Kilometry" },
{ eOdometerUnit.Miles, "Mile" },
{ eOdometerUnit.NauticalMiles, "Mile morskie" },
};
public Dictionary<T, string> GetValues<T>()
{
if (T.GetType() == typeof(eTypeOfDrive))
return TypeOfDriveNames;
if (T == typeof(eVehicleMarkingType))
return VehicleMarkingTypeNames;
if (T == typeof(eFuelType))
return FuelTypeNames;
if (T == typeof(eUnitOfFuel))
return UnitOfFuelNames;
if (T == typeof(eOdometerUnit))
return OdometerUnitNames;
}