【问题标题】:status field with "given values" (list of valid values) in a class C# (.NET Core)C#(.NET Core)类中具有“给定值”(有效值列表)的状态字段
【发布时间】:2021-04-22 23:27:25
【问题描述】:

我是一名 C# 初学者,正在寻找一个简单的选项来在类中存储状态字段。

此字段应仅允许某些值,例如“open”、“picked”、“packaged”、“shipped”。

稍后我想根据此状态字段(按值)过滤一组订单。

namespace Prototype.Models
{
    public class Order
    {
        public string Id { get; }
        public string Status { get; }
        public int Priority { get; }
        
        public Order(string id, string status, int priority)
        {
            Id = id;
            Status = status;
            Priority = priority;
        }
    }
}

我读过一些关于 Ienumerable 的文章。但我不确定。

状态字段的类型并不重要,只要我可以过滤它。 字符串肯定会有所帮助。类似于具有静态指定值的枚举。

通过构造函数创建时我还需要检查。有没有办法尝试或抛出异常?

namespace Prototype
{
    class Program
    {
        static void Main(string[] args)
        {
            var SampleOrder = new Order("id001", "picked", 123);
            
            Console.WriteLine(SampleOrder.Status);
        }
    }
}

应该不可能通过构造方法实例化一个接收状态参数“broken”的对象。

也许稍后必须扩展状态的有效值列表。但是,列表可以是静态的。

如果状态是可读的 (public ... {get;}) 也是有意义的。那么这个返回值应该是一个“说话”的值。

【问题讨论】:

  • 为什么不使用枚举?这正是他们的目的。
  • 所以拼写错误是不可能的,例如"piked".
  • "可能会发生状态的有效值列表必须稍后扩展。但是,该列表可以是静态的。"所以呢?它是变化的还是静态的?
  • @HimBromBeere:我手动添加任何缺失的状态(在代码中),但这种情况很少发生。

标签: c# validation .net-core parameters


【解决方案1】:

你必须定义枚举,类似于一个类,然后将它声明为一个类成员,像这样......

namespace Prototype.Models
{
    public enum OrderStatus
    {
        Open,
        Picked,
        Packaged,
        Shipped
    }

    public class Order
    {
        public string Id { get; }
        public OrderStatus Status { get; }
        public int Priority { get; }
    
        public Order(string id, OrderStatus status, int priority)
        {
            Id = id;
            Status = status;
            Priority = priority;
        }
    }
}

【讨论】:

  • 好的。这对我来说似乎可以理解。抱歉,我以前从未在 C# 中使用过枚举。所以写成一堂课。好的。我喜欢。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
相关资源
最近更新 更多