如何检查参数是否与C#中的枚举值匹配?

时间:2012-10-16 13:00:43

标签: c#

我有这个枚举:

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添加到此类。

3 个答案:

答案 0 :(得分:4)

您可以使用Enum.IsDefined查看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"));
}

您还可以定义一个不设置支持字段的setter,除非新的value定义为enum:

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关键字访问新值。

答案 1 :(得分:1)

您可以使用Enum.Parse()

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

如果pkContentKey中定义的任何命名常量不匹配,则会抛出ArgumentException

答案 2 :(得分:0)

试试这个。

if(Enum.IsDefined(typeof(ContentKey),pk))
{
   //Do your work;
}