C#枚举类型共享多个类

C#枚举类型共享多个类,c#,enums,C#,Enums,我试图找到处理以下情况的最优雅方式: class ObjectA { public enum MandatoryParameters {A, B, C} public enum OptionalParameters {D, E, F} } class ObjectB { public enum MandatoryParameters {G, H, I} public enum OptionalParameters {J, K} } class Error {

我试图找到处理以下情况的最优雅方式:

class ObjectA
{
    public enum MandatoryParameters {A, B, C}
    public enum OptionalParameters {D, E, F}
}
class ObjectB
{
    public enum MandatoryParameters {G, H, I}
    public enum OptionalParameters {J, K}
}
class Error
{
    MandatoryOrOptionalParameters param;
    string errorDescription;

    Error(MandatoryOrOptionalParameters p, string d)
    {
        param = p;
        errorDescription = d;
    }
}

有没有什么好方法可以创建一个
MandatoryOrOptionalParameters
类型来避免
string
?我读了几条相关的信息,然后回答

创建一个表示任何类型参数的枚举,然后每个类将获取或指定一组表示可选或必需参数的项:

public enum Parameters { A, B, C, D, E }

// Class specifies for itself the mandatory and optional
public class Foo
{
    public IEnumerable<Parameters> Mandatory { get; set; } = new List<Parameters> { A, B };

    public IEnumerable<Parameters> Optional { get; set; } = new List<Parameters> { C, D };
}

// Class receives what are the mandatory and optional
public class Bar
{
    public Bar(IEnumerable<Parameter> optional, IEnumerable<Parameter> mandatory)
    {
        // store input
    }
}
公共枚举参数{A,B,C,D,E}
//类为自己指定强制和可选的
公开课Foo
{
public IEnumerable强制{get;set;}=新列表{A,B};
public IEnumerable可选{get;set;}=新列表{C,D};
}
//类接收哪些是必需的,哪些是可选的
公共类酒吧
{
公共栏(IEnumerable可选,IEnumerable强制)
{
//存储输入
}
}

创建一个表示任何类型参数的枚举,然后每个类将获取或指定一组表示可选或必需参数的项:

public enum Parameters { A, B, C, D, E }

// Class specifies for itself the mandatory and optional
public class Foo
{
    public IEnumerable<Parameters> Mandatory { get; set; } = new List<Parameters> { A, B };

    public IEnumerable<Parameters> Optional { get; set; } = new List<Parameters> { C, D };
}

// Class receives what are the mandatory and optional
public class Bar
{
    public Bar(IEnumerable<Parameter> optional, IEnumerable<Parameter> mandatory)
    {
        // store input
    }
}
公共枚举参数{A,B,C,D,E}
//类为自己指定强制和可选的
公开课Foo
{
public IEnumerable强制{get;set;}=新列表{A,B};
public IEnumerable可选{get;set;}=新列表{C,D};
}
//类接收哪些是必需的,哪些是可选的
公共类酒吧
{
公共栏(IEnumerable可选,IEnumerable强制)
{
//存储输入
}
}

听起来像是一个问题,解决方案Y将是“我知道,我将使用枚举”,这是问题X的次优解决方案。解释为什么您首先选择枚举,以及您将如何使用它们,这样也许可以建议一个更好的设计。检查枚举类型的flags属性Smart comment CodeCaster:-)我在发布时有这种感觉。枚举值表示序列化过程中填充的对象属性。我正在使用枚举类型1)循环通过强制并检查null值=>引发错误,2)创建验证错误列表,以字段/ErrorDescription的形式显示。听起来像是,解决方案Y将是“我知道,我将使用枚举”,这是问题X的次优解决方案。解释为什么您首先选择枚举,以及您将如何使用它们,这样也许可以建议一个更好的设计。检查枚举类型的flags属性Smart comment CodeCaster:-)我在发布时有这种感觉。枚举值表示序列化过程中填充的对象属性。我正在使用枚举类型进行1)强制循环并检查null值=>raise error,2)创建验证错误列表,以字段/ErrorDescription的形式显示。我认为,您也可以使用[flag]属性:P@sTrenat-是的,如果选择像在
Foo
中这样的选项,那么使用属性类来指定它是一种很好的方法。听起来很优雅,让我试试并反馈一下。@Salim-我个人会选择第二个选项,因为它更适合SOLID:)Bar的构造函数使用两个相同的参数。所以它很容易出错。我认为,您也可以使用[flag]属性:P@sTrenat-是的,如果选择像在
Foo
中这样的选项,那么使用属性类来指定它是一种很好的方式,听起来很优雅,让我试一下并反馈。@Salim-我个人会选择第二个选项,因为它更适合SOLID:)Bar的构造函数使用两个相同的参数。所以它很容易出错。