1

私はこの列挙型を持っています:

public enum ContentKey {
    Menu = 0,
    Article = 1,
    FavoritesList = 2
};

このアクション メソッド:

public ActionResult Edit(string pk, string rk, int row = 0) {
    try {
        var content = _contentService.Get(pk, rk);

Contentに基づく次のクラスTableServiceEntityTableServiceEntity私のすべてのデータクラスに共通していることに注意してください。

public class Content : TableServiceEntity 
{

public abstract class TableServiceEntity
{
    protected TableServiceEntity();
    protected TableServiceEntity(string partitionKey, string rowKey);
    public virtual string PartitionKey { get; set; }

pk列挙値のいずれかと一致する値を確認する方法はありますか? よくわからないのは、これを確認する方法です。クラスにチェックが必要だと思いますが、一致しない場合Contentにオーバーライドしvirtual stringて例外をスローする方法がわかりません。

更新:可能であれば、Content クラスの get set でこれを行いたいのですが、このクラスに get set を追加する方法がわかりません。

4

3 に答える 3

4

Enum 値と一致するEnum.IsDefinedかどうかを確認するために使用できます。string

public enum ContentKey
{
    Menu = 0,
    Article = 1,
    FavoritesList = 2
}

static bool Check(string pk)
{
    return Enum.IsDefined(typeof(ContentKey), pk);
}

static void Main(string[] args)
{
    Console.WriteLine(Check("Menu"));
    Console.WriteLine(Check("Foo"));
}

valuenewが列挙型で定義されていない限り、バッキング フィールドを設定しないセッターを定義することもできます。

class Foo
{
    private string pk;

    public string PK
    {
        get
        {
            return this.pk;
        }
        set
        {
            if(Enum.IsDefined(typeof(ContentKey), value))
            {
                this.pk = value;
            }
            else
            {
                throw new ArgumentOutOfRangeException();
            }
        }
    }
}

これは、バッキング フィールドを自分で定義する非自動プロパティです。新しい値は、valueキーワードを介してアクセスできます。

于 2012-10-16T13:02:57.167 に答える
1

Enum.Parse()を使用できます:

ContentKey key = (ContentKey) Enum.Parse(typeof(ContentKey), pk);

で定義されている名前付き定数のいずれとも一致しない場合、 ArgumentExceptionがスローされます。pkContentKey

于 2012-10-16T13:05:45.817 に答える
0

これを試して。

if(Enum.IsDefined(typeof(ContentKey),pk))
{
   //Do your work;
}
于 2012-10-16T13:08:44.313 に答える