कुछ अन्य अधिक आदिम विकल्प जो कक्षाओं / संदर्भ प्रकारों से बचते हैं:
- सरणी विधि
- नेस्टेड स्ट्रक्चर मेथड
सरणी विधि
private struct PublishStatusses
{
public static string[] Desc = {
"Not Completed",
"Completed",
"Error"
};
public enum Id
{
NotCompleted = 0,
Completed,
Error
};
}
प्रयोग
string desc = PublishStatusses.Desc[(int)PublishStatusses.Id.Completed];
नेस्टेड स्ट्रक्चर मेथड
private struct PublishStatusses
{
public struct NotCompleted
{
public const int Id = 0;
public const string Desc = "Not Completed";
}
public struct Completed
{
public const int Id = 1;
public const string Desc = "Completed";
}
public struct Error
{
public const int Id = 2;
public const string Desc = "Error";
}
}
प्रयोग
int id = PublishStatusses.NotCompleted.Id;
string desc = PublishStatusses.NotCompleted.Desc;
अपडेट (03/09/2018)
विस्तार विधियों का एक संकर और ऊपर की पहली तकनीक।
मैं परिभाषित करना पसंद करता हूं कि वे कहां हैं "वे" (मूल के अपने स्रोत के करीब हैं और कुछ सामान्य, वैश्विक नाम स्थान में नहीं)।
namespace ViewModels
{
public class RecordVM
{
//public enum Enum { Minutes, Hours }
public struct Enum
{
public enum Id { Minutes, Hours }
public static string[] Name = { "Minute(s)", "Hour(s)" };
}
}
}
विस्तार विधि एक सामान्य क्षेत्र के लिए उपयुक्त लगती है, और एनम की "स्थानीयकृत" परिभाषा अब विस्तार विधि को और अधिक क्रियाशील बनाती है।
namespace Common
{
public static class EnumExtensions
{
public static string Name(this RecordVM.Enum.Id id)
{
return RecordVM.Enum.Name[(int)id];
}
}
}
एनम का एक उपयोग उदाहरण और यह विस्तार विधि है।
namespace Views
{
public class RecordView
{
private RecordDataFieldList<string, string> _fieldUnit;
public RecordView()
{
_fieldUnit.List = new IdValueList<string, string>
{
new ListItem<string>((int)RecordVM.Enum.Id.Minutes, RecordVM.Enum.Id.Minutes.Name()),
new ListItem<string>((int)RecordVM.Enum.Id.Hours, RecordVM.Enum.Id.Hours.Name())
};
}
private void Update()
{
RecordVM.Enum.Id eId = DetermineUnit();
_fieldUnit.Input.Text = _fieldUnit.List.SetSelected((int)eId).Value;
}
}
}
नोट: मैंने वास्तव में Enum
रैपर (और Name
सरणी) को खत्म करने का फैसला किया , क्योंकि यह सबसे अच्छा है कि नाम स्ट्रिंग्स हार्ड कोडित होने के बजाय एक संसाधन (यानी कॉन्फिग फाइल या डीबी) से आते हैं, और क्योंकि मैंने एक्सटेंशन पद्धति को समाप्त कर दिया है ViewModels
नाम स्थान (बस एक अलग, "CommonVM.cs" फ़ाइल में)। साथ ही पूरी .Id
चीज विचलित और बोझिल हो जाती है।
namespace ViewModels
{
public class RecordVM
{
public enum Enum { Minutes, Hours }
//public struct Enum
//{
// public enum Id { Minutes, Hours }
// public static string[] Name = { "Minute(s)", "Hour(s)" };
//}
}
}
CommonVM.cs
//namespace Common
namespace ViewModels
{
public static class EnumExtensions
{
public static string Name(this RecordVM.Enum id)
{
//return RecordVM.Enum.Name[(int)id];
switch (id)
{
case RecordVM.Enum.Minutes: return "Minute(s)";
case RecordVM.Enum.Hours: return "Hour(s)";
default: return null;
}
}
}
}
एनम का एक उपयोग उदाहरण और यह विस्तार विधि है।
namespace Views
{
public class RecordView
{
private RecordDataFieldList<string, string> _fieldUnit
public RecordView()
{
_fieldUnit.List = new IdValueList<string, string>
{
new ListItem<string>((int)RecordVM.Enum.Id.Minutes, RecordVM.Enum.Id.Minutes.Name()),
new ListItem<string>((int)RecordVM.Enum.Id.Hours, RecordVM.Enum.Id.Hours.Name())
};
}
private void Update()
{
RecordVM.Enum eId = DetermineUnit();
_fieldUnit.Input.Text = _fieldUnit.List.SetSelected((int)eId).Value;
}
}
}