这是我的自定义属性和我正在使用它的类:
[MethodAttribute(new []{new MethodAttributeMembers(), new MethodAttributeMembers()})]
public class JN_Country
{
}
public class MethodAttribute : Attribute
{
public MethodAttributeMembers[] MethodAttributeMembers { get; set; }
public MethodAttribute(MethodAttributeMembers[] methodAttributeMemberses)
{
MethodAttributeMembers = methodAttributeMemberses;
}
}
public class MethodAttributeMembers
{
public string MethodName { get; set; }
public string Method { get; set; }
public string MethodTitle { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
语法错误,显示在上面的第一行:
属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
为什么会出现此错误?
我使用这个接受的答案来创建一个指南枚举。
public enum AccessRoles
{
[EnumGuid("2ED3164-BB48-499B-86C4-A2B1114BF1")]
SysAdmin =1,
[EnumGuid("A5690E7-1111-4AFB-B44D-1DF3AD66D435")]
Admin = 2,
[EnumGuid("30558C7-66D9-4189-9BD9-2B87D11190")]
OrgAdmin = 3,
}
class EnumGuid : Attribute
{
public Guid Guid;
public EnumGuid(string guid)
{
Guid = new Guid(guid);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试检查 Guid 是否是枚举的一部分,即使 userId = 2ED3164-BB48-499B-86C4-A2B1114BF1 是有效的 guid,它也会引发异常 System.InvalidOperationException。
if(Enum.IsDefined(typeof(AccessRoles), userId))
{
}
Run Code Online (Sandbox Code Playgroud)
我尝试将其转换为字符串并进行检查,但这次它不会抛出错误,但不会进入 if 循环。
if(Enum.IsDefined(typeof(AccessRoles), userId.ToString().ToUpper()))
{
}
Run Code Online (Sandbox Code Playgroud)
那么我该如何修复它呢?或者,还有更好的方法?我想避免使用多个 if 语句或 case 语句,因此将其用作枚举,以便它们可以重用。