相关疑难解决方法(0)

属性参数必须是常量表达式,...-创建类型为array的属性

这是我的自定义属性和我正在使用它的类:

[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表达式或数组创建表达式

为什么会出现此错误?

c# custom-attributes

33
推荐指数
2
解决办法
6万
查看次数

创建 GUID 枚举

我使用这个接受的答案来创建一个指南枚举。

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 语句,因此将其用作枚举,以便它们可以重用。

c# enums guid

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

custom-attributes ×1

enums ×1

guid ×1