শ্রেণি / রেফারেন্সের ধরণগুলি এড়ানো এমন আরও কয়েকটি প্রাথমিক বিকল্প:
- অ্যারে পদ্ধতি
- নেস্টেড স্ট্রাক্ট পদ্ধতি
অ্যারে পদ্ধতি
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)
এক্সটেনশন পদ্ধতিগুলির একটি সংকর এবং উপরে প্রথম কৌশল technique
আমি এনামগুলিকে সংজ্ঞায়িত করতে পছন্দ করি যেখানে তারা "অন্তর্গত" (তাদের উত্সের উত্সের নিকটতম এবং কিছু সাধারণ, বিশ্বব্যাপী নেমস্পেসে নয়)।
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
নেমস্পেস (কেবল একটি আলাদা, "কমনভিএম.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;
}
}
}