piszę niektóre funkcje Enum, i mają następujące:Dodawanie Ograniczenia dla Nullable Enum
public static T ConvertStringToEnumValue<T>(string valueToConvert, bool isCaseSensitive)
{
if (typeof(T).BaseType.FullName != "System.Enum" && typeof(T).BaseType.FullName != "System.ValueType")
{
throw new ArgumentException("Type must be of Enum and not " + typeof (T).BaseType.FullName);
}
if (String.IsNullOrWhiteSpace(valueToConvert))
return (T)typeof(T).TypeInitializer.Invoke(null);
valueToConvert = valueToConvert.Replace(" ", "");
if (typeof(T).BaseType.FullName == "System.ValueType")
{
return (T)Enum.Parse(Nullable.GetUnderlyingType(typeof(T)), valueToConvert, !isCaseSensitive);
}
return (T)Enum.Parse(typeof(T), valueToConvert, !isCaseSensitive);
}
nazywam go tak:
EnumHelper.ConvertStringToEnumValue<Enums.Animals?>("Cat");
Chcę teraz dodać do ograniczenia do T Enum, taki jak (który dostałem od Stackoverflow article): where T : struct, IConvertible
, ale mam problemy jako T potrzeby, aby móc wziąć zerowe wyliczenia. Komunikat o błędzie:
Typ "Enums.Animals?" musi być typ wartości spoza zerowalne w celu wykorzystania go jako parametr „T” w ogólnym typie lub metodzie
Czy istnieje sposób, aby to zrobić, czy trzeba po prostu polegać na sprawdzaniu wykonawczego, który Mam w środku tę metodę?
Dzięki!
NIE NALEŻY DUPPLIKOWAĆ SWOICH PYTAŃ !!! W obecnej formie twój kod jest fałszywy. Proszę odnieść się do poprzedniego pytania, dlaczego tak mówię. – leppie
@leppie: Chociaż obecny kod jest fałszywy, część ograniczenia nie jest - i jest to osobne pytanie. –
@ Jon Skeet: Wierzę mocno w rozwiązywanie jednego problemu na raz. Sposób, w jaki postępuje PO, po prostu się myli i ostatecznie marnuje cały czas ludzi próbujących mu pomóc. – leppie