我有这个枚举:
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添加到此类。
答案 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);
如果pk
与ContentKey
中定义的任何命名常量不匹配,则会抛出ArgumentException。
答案 2 :(得分:0)
试试这个。
if(Enum.IsDefined(typeof(ContentKey),pk))
{
//Do your work;
}