.NET Core සහ .NET> 4 හි සාමාන්ය විග්රහ ක්රමයක් ඇත :
Enum.TryParse("Active", out StatusEnum myStatus);
මෙයට C # 7 හි නව පේළි out
විචල්යයන් ද ඇතුළත් වේ , එබැවින් මෙය උත්සාහ කිරීම-විග්රහ කිරීම, පැහැදිලි එනූම් වර්ගයට පරිවර්තනය කිරීම සහ ආරම්භක + myStatus
විචල්යය ජනනය කරයි .
ඔබට C # 7 සහ නවතම .NET වෙත ප්රවේශය ඇත්නම් මෙය හොඳම ක්රමයයි.
මුල් පිළිතුර
.NET හි එය තරමක් කැතයි (4 හෝ ඊට වැඩි):
StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);
මම මෙය සරල කිරීමට නැඹුරු වෙමි:
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
එවිට මට කළ හැකිය:
StatusEnum MyStatus = EnumUtil.ParseEnum<StatusEnum>("Active");
අදහස් දැක්වීමේදී යෝජනා කර ඇති එක් විකල්පයක් වන්නේ දිගුවක් එක් කිරීමයි, එය ප්රමාණවත් තරම් සරල ය:
public static T ToEnum<T>(this string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
StatusEnum MyStatus = "Active".ToEnum<StatusEnum>();
අවසාන වශයෙන්, නූල විග්රහ කළ නොහැකි නම් භාවිතා කිරීමට පෙරනිමි සංඛ්යාවක් ලබා ගැනීමට ඔබට අවශ්ය විය හැකිය:
public static T ToEnum<T>(this string value, T defaultValue)
{
if (string.IsNullOrEmpty(value))
{
return defaultValue;
}
T result;
return Enum.TryParse<T>(value, true, out result) ? result : defaultValue;
}
මෙය ඇමතුම ලබා දෙන්නේ:
StatusEnum MyStatus = "Active".ToEnum(StatusEnum.None);
කෙසේ වෙතත්, මම මෙවැනි දීර් extension ක්රමයක් එකතු කිරීමට ප්රවේශම් වන්නෙමි string
(නාම අවකාශ පාලනයක් නොමැතිව) එය string
එනුම් එකක් තිබේද නැද්ද යන්න පිළිබඳ සෑම අවස්ථාවකම එය දිස්වනු ඇත ( 1234.ToString().ToEnum(StatusEnum.None)
එය වලංගු නමුත් විකාරයකි). මයික්රොසොෆ්ට් හි මූලික පංති අතිරේක ක්රමවේදයන් සමඟ පැටලීමෙන් වැළකී සිටීම වඩාත් සුදුසු වන්නේ විශේෂිත සන්දර්භයන් තුළ පමණක් අදාළ වන අතර එම දීර් ensions කිරීම් මොනවාද යන්න පිළිබඳව ඔබේ සමස්ත සංවර්ධන කණ්ඩායමට මනා අවබෝධයක් නොමැති නම් පමණි.