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基于TableServiceEntity. 请注意,这TableServiceEntity对我的所有数据类都是通用的。

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.IsDefined来查看 a 是否string与 Enum 值匹配:

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"));
}

您还可以定义一个不设置支持字段的设置器,除非将新value定义的枚举定义为:

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);

如果不匹配定义在.pkContentKey

于 2012-10-16T13:05:45.817 回答
0

试试这个。

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