【问题标题】:C# enum type shared multiple classesC#枚举类型共享多个类
【发布时间】:2017-08-27 07:04:44
【问题描述】:

我正在尝试找到处理以下情况的最优雅的方法:

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?我阅读了一些相关的消息herehere

【问题讨论】:

  • 听起来像 XY problem,您的解决方案 Y 将是 “我知道,我将使用枚举”,这是问题 X 开始时的次优解决方案.解释你为什么选择枚举,以及你将如何使用它们,所以也许可以建议一个更好的设计。
  • 检查枚举类型的标志属性
  • 智能评论 CodeCaster :-) 我在发帖时有这种感觉。枚举值表示在序列化过程中填充的对象属性。我将枚举类型用于 1)强制循环并检查 null 值是否 => 引发错误,2)创建验证错误列表,以 Field/ErrorDescription 的形式显示。

标签: c# enums


【解决方案1】:

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

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
    }
}

【讨论】:

  • 我想,你也可以使用 [flag] 属性:P
  • @sTrenat - 是的,如果您选择Foo 中的选项,那么使用属性类来指定它也是一种不错的方式
  • 哇听起来很优雅,让我试一试并反馈。
  • @Salim - 我个人会选择第二个选项,因为它更适合 SOLID :)
  • Bar 的构造函数采用两个相同的参数。所以容易出错。
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多