कोड की मात्रा के लिए क्षमा करें, लेकिन इसे इस तरह से समझाना आसान है।जेनिक्स, enums और कस्टम विशेषताओं - क्या यह संभव है?
मैं एक कस्टम है विशेषता CustomUserData इस प्रकार के रूप में लागू:
public class CustomUserData : Attribute
{
public CustomUserData(object aUserData)
{
UserData = aUserData;
}
public object UserData { get; set; }
}
और के रूप में enums के लिए एक विस्तार विधि:
public static class EnumExtensions
{
public static TAttribute GetAttribute<TAttribute>(this Enum aValue) where TAttribute : Attribute
{
Type type = aValue.GetType();
string name = Enum.GetName(type, aValue);
return type.GetField(name)
.GetCustomAttributes(false)
.OfType<TAttribute>()
.SingleOrDefault();
}
public static object GetCustomUserData(this Enum aValue)
{
CustomUserData userValue = GetAttribute<CustomUserData>(aValue);
return userValue != null ? userValue.UserData : null;
}
}
मैं तो एक सहायक वर्ग जो serializes है/एक enum है कि deserializes इसके साथ जुड़े कस्टम डेटा निम्नानुसार हैं:
public static class ParameterDisplayModeEnumListHelper
{
public static List<ParameterDisplayModeEnum> FromDatabase(string aDisplayModeString)
{
//Default behaviour
List<ParameterDisplayModeEnum> result = new List<ParameterDisplayModeEnum>();
//Split the string list into a list of strings
List<string> listOfDisplayModes = new List<string>(aDisplayModeString.Split(','));
//Iterate the enum looking for matches in the list
foreach (ParameterDisplayModeEnum displayModeEnum in Enum.GetValues(typeof (ParameterDisplayModeEnum)))
{
if (listOfDisplayModes.FindIndex(item => item == (string)displayModeEnum.GetCustomUserData()) >= 0)
{
result.Add(displayModeEnum);
}
}
return result;
}
public static string ToDatabase(List<ParameterDisplayModeEnum> aDisplayModeList)
{
string result = string.Empty;
foreach (ParameterDisplayModeEnum listItem in aDisplayModeList)
{
if (result != string.Empty)
result += ",";
result += listItem.GetCustomUserData();
}
return result;
}
}
हालांकि थाई रों विशिष्टको ParameterDisplayModeEnum है और मैं enums कि मैं क्रमबद्धता/अक्रमांकन के लिए इस तरह के इलाज के लिए की जरूरत का एक समूह है तो मैं के रूप में एक सामान्य ऐसे किया जाना पसंद करेंगे:
public static class EnumListHelper<TEnum>
{
public static List<TEnum> FromDatabase(string aDisplayModeString)
{
//Default behaviour
List<TEnum> result = new List<TEnum>();
//Split the string list into a list of strings
List<string> listOfDisplayModes = new List<string>(aDisplayModeString.Split(','));
//Iterate the enum looking for matches in the list
foreach (TEnum displayModeEnum in Enum.GetValues(typeof (TEnum)))
{
if (listOfDisplayModes.FindIndex(item => item == (string)displayModeEnum.GetCustomUserData()) >= 0)
{
result.Add(displayModeEnum);
}
}
return result;
}
public static string ToDatabase(List<TEnum> aDisplayModeList)
{
string result = string.Empty;
foreach (TEnum listItem in aDisplayModeList)
{
if (result != string.Empty)
result += ",";
result += listItem.GetCustomUserData();
}
return result;
}
}
हालांकि इस काम नहीं करेगा चूंकि GetCustomUserData() को नहीं बुलाया जा सकता है। कोई सुझाव? मैं कस्टम विशेषता या enums के उपयोग का उपयोग नहीं कर सकता। मैं प्रत्येक बार एक ठोस सूची सहायक वर्ग लिखने के बिना serialization/deserialization करने के लिए एक सामान्य तरीका की तलाश में हूँ।
सभी सुझावों की सराहना की।
कि महान है और बस चाहता हूँ मैं प्राप्त करने के लिए कोशिश कर रहा था। धन्यवाद। – TheEdge
कृपया कोड न केवल डंप करें, समझाएं कि आपने क्या किया है। – CodeCaster
@CodeCaster मैंने जवाब अपडेट किया। –