c# の enum に変換したいClientCreditResolutionPlanActionTypeというSQLルックアップテーブルがあります。 =。
非常に基本的なリクエストですね。正しい。
私のテーブルは、現在 enum ですが、いくつかの列、または現在、それに付随する必要のある説明プロパティがあります。
だから私は私ができると思った...
namespace System.ComponentModel
{
class StatusIconAttribute : Attribute
{
public string StatusIcon;
public StatusIconAttribute(string statusIcon) { StatusIcon = statusIcon; }
}
class StatusTextAttribute : Attribute
{
public string StatusText;
public StatusTextAttribute(string statusText) { StatusText = statusText; }
}
class TypeTextAttribute : Attribute
{
public string TypeText;
public TypeTextAttribute(string typeText) { TypeText = typeText; }
}
}
...私のExtensions.csクラスで.。
public static class EnumExtensions
{
public static string GetStatusIcon(this Enum value)
{
var type = value.GetType();
string name = Enum.GetName(type, value);
if (name == null) { return null; }
var field = type.GetField(name);
if (field == null) { return null; }
var attr = Attribute.GetCustomAttribute(field, typeof(StatusIconAttribute)) as StatusIconAttribute;
if (attr == null) { return null; }
return attr.StatusIcon;
}
public static string GetStatusText(this Enum value)
{
var type = value.GetType();
string name = Enum.GetName(type, value);
if (name == null) { return null; }
var field = type.GetField(name);
if (field == null) { return null; }
var attr = Attribute.GetCustomAttribute(field, typeof(StatusTextAttribute)) as StatusTextAttribute;
if (attr == null) { return null; }
return attr.StatusText;
}
public static string GetTypeText(this Enum value)
{
var type = value.GetType();
string name = Enum.GetName(type, value);
var type = value.GetType();
string name = Enum.GetName(type, value);
if (name == null) { return null; }
var field = type.GetField(name);
if (field == null) { return null; }
var attr = Attribute.GetCustomAttribute(field, typeof(TypeTextAttribute)) as TypeTextAttribute;
if (attr == null) { return null; }
return attr.TypeText;
}
}
...そして最後に私の他のプロジェクトでは次のように使用します:
namespace ClientSystemServiceLibrary.Enums
{
[DataContract]
public enum ClientCreditResolutionPlanActionType
{
[EnumMember]
[TypeText("New resolution plan submitted.")]
[StatusText("New Plan")]
[StatusIcon("star.png")]
NewPlan = 1,
[EnumMember]
[TypeText("Resolution plan waiting on approval.")]
[StatusText("Under Review")]
[StatusIcon("review.png")]
UnderReview = 2,
[EnumMember]
[TypeText("Resolution plan approved.")]
[StatusText("Approved")]
[StatusIcon("check.png")]
Approved = 3,
[EnumMember]
[TypeText("Resolution plan rejected.")]
[StatusText("Rejected")]
[StatusIcon("cross.png")]
Rejected = 4,
[EnumMember]
[TypeText("New resolution plan comment submitted.")]
[StatusText("New Comment")]
[StatusIcon("message.png")]
NewComment = 5
}
}E
ただし、次のエラーメッセージが表示されるため、私が考えたことが間違っていました。
'System.CompenentModel.TypeTextAttribute'は、保護レベルが原因でアクセスできません
そして
タイプまたは名前空間の名前 'TypeText'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)
同じ...すべての3。
デフォルトでは、すべてのクラスは内部です。他のアセンブリからアクセスできるようにする場合は、「パブリック」アクセス修飾子を指定する必要があります。このような:
public class TypeTextAttribute : Attribute
{
public string TypeText;
public TypeTextAttribute(string typeText) { TypeText = typeText; }
}