c#泛型枚举作为构造函数参数

c#泛型枚举作为构造函数参数,c#,enums,parameters,C#,Enums,Parameters,因此: 项目B参考项目A,项目A是一个核心库 项目A有一个属性类,其构造函数当前接受字符串数组(inProjectPermissionTypes): 项目B使用上述类作为属性 [Attributes.Permissions.Project.Read(Attributes.Permissions.enumPermissionType.ALLOW, "P1", "P2")] 我想用项目B中的emum中的枚举值数组替换“P1”、“P2”部分-问题是-如何做-由

因此:

项目B参考项目A,项目A是一个核心库

项目A有一个属性类,其构造函数当前接受字符串数组(inProjectPermissionTypes):

项目B使用上述类作为属性

[Attributes.Permissions.Project.Read(Attributes.Permissions.enumPermissionType.ALLOW, "P1", "P2")]
我想用项目B中的emum中的枚举值数组替换“P1”、“P2”部分-问题是-如何做-由于项目A无法直接了解项目B中的枚举,我无法将枚举放在项目A中,因此我认为可能有一种通用的方法来设置:

params string[] inProjectPermissionType 
比如:

params magicEnum inProjectPermissionType 
它将接受我可以在构造函数中分解的任何枚举

我有一些问题使这听起来不可能-它的友好性质的枚举屏蔽整数值,我在追求,所以任何想法围绕这也将是赞赏的


非常感谢

在项目B中添加一个继承项目a的Read属性的属性类,我们称之为
ProjectBRead
。然后在项目B中使用该属性

enum YourEnum
{
    P1,
    P2
}


public class ProjectBRead : Read // Read from project A
{    
   public ProjectBRead(enumPermissionType inPermissionType, params YourEnum[] inProjectPermissionTypes)
   : base(inPermissionType, inProjectPermissionTypes.Select(e => e.ToString()).ToArray())
   {
     
   }
    
} 

然后在项目B中这样使用:


[ProjectBRead(Attributes.Permissions.enumPermissionType.ALLOW,YourEnum.P1,YourEnum.P2)]

将非常有助于上下文化您在何处使用此属性(检查最后的链接)

根据您提供的内容,您可以在a项目中声明一个通用接口,然后在B项目中声明一个具体类型

public interface IRead<TPermissionType> where TPermissionType : Enum
{
    public TPermissionType[] Permissions { get; }
}

public enum MyEnum { }

public class ReadConcrete : Attribute, IRead<MyEnum>
{
    public MyEnum[] Permissions { get; }

    public ReadConcrete(MyEnum[] permissions)
    {
        Permissions = permissions;
    }
}
公共接口IRead,其中TPermissionType:Enum { 公共TPermissionType[]权限{get;} } 公共枚举MyEnum{} 公共类ReadConcrete:属性,IRead { public MyEnum[]权限{get;} public ReadConcrete(MyEnum[]权限) { 权限=权限; } }

foreach(inProjectPermissionTypes中的字符串p){PermissionType=(enumPermissionType)Enum.Parse(typeof(enumPermissionType),p);}“项目A不能直接知道项目A中的枚举”-打字?你是说项目B中的enum?是的,谢谢-拼写错误修复这很有趣,谢谢,我在项目B中的一个类上使用了属性,并使用反射使用项目a中该类的信息。我已经尝试实现了您的建议,但看不出它如何导致能够在属性类的构造函数中使用enum form Project B请提供使用属性的代码,这样您的问题是完全可重复的。这非常感谢,主要是因为我理解它,但忽略了它作为解决方案,在项目B中实现代码(考虑所有类型的权限-读取、编辑、存档等)有点遗憾,但它确实依赖于项目B中的构造函数,并允许我使用枚举,这就是重点,所以我感谢您again@glumlun如果这是一个您可以使用的解决方案,请标记为answerJust以注意语法的两个问题:base not:base和.ToArray()not.ToArray
public interface IRead<TPermissionType> where TPermissionType : Enum
{
    public TPermissionType[] Permissions { get; }
}

public enum MyEnum { }

public class ReadConcrete : Attribute, IRead<MyEnum>
{
    public MyEnum[] Permissions { get; }

    public ReadConcrete(MyEnum[] permissions)
    {
        Permissions = permissions;
    }
}