【问题标题】:Using enums as status returned status indicators in C#在 C# 中使用枚举作为状态返回的状态指示器
【发布时间】:2011-03-06 02:56:45
【问题描述】:

只是想知道关于从指示状态的方法返回枚举的普遍共识是什么。返回代码(整数)的概念在老式系统编程(C)中是天生的,但我想知道指示状态的方法是否已经改变。

谢谢

编辑:我知道枚举基本上是 int 值。我正在询问让方法开始抛出状态代码(无论是枚举还是整数)以完全指示状态的纯粹做法。这似乎是一个很好的做法,但我想知道这个想法是否有任何负面情绪。

我总是选择枚举而不是 int 返回状态码。

【问题讨论】:

    标签: c# design-patterns enums


    【解决方案1】:

    如果您返回枚举以指示错误而不是抛出异常,那么您当然处于罪恶状态。

    调用者真的对某事物的状态感兴趣吗?我通常在 C 风格的函数库中发现这种东西,其中没有对象来表示状态。这取决于您要做什么,但是如果您(比如说)创建代码来管理通信套接字,我强烈建议将它们包装在类中并允许客户端代码通过属性而不是作为结果来检测它们的状态打开()方法。

    【讨论】:

    • 嗯,我想这真的取决于错误的严重程度,对吧?例如,如果我有一个私有字典和一个添加条目的方法,如果操作员忘记检查是否使用了密钥,我是否应该抛出错误?似乎一个简单的返回码可以节省大量时间/费用
    • 带有 try / catches 和冒泡异常的过程。
    • 一切的答案都是“视情况而定”。在字典的情况下,提供两种方法,一种是抛出,一种是覆盖(例如 System.Collections.Generic.Dictionary)。然而,使用返回码,命名方法变得很棘手,因为它做了两件事——通常是代码味道。
    【解决方案2】:

    如果你想要的只是一个返回的状态,那么 enum 是一种比 int 更好的方法,原因有很多,它强制一致意味着什么,所以你不必记住返回码 1意味着,使您的代码更易于维护。

    【讨论】:

      【解决方案3】:

      因为枚举基本上只是一个 int,所以它可以正常工作。您将获得智能感知的额外好处。

      这是假设您想要函数调用的状态。如果您正在寻找系统/整体状态,您可能希望将其公开为事件。

      【讨论】:

        【解决方案4】:

        只是在这里大声思考,但为什么不只返回一个对象(类),类型取决于您需要如何使用它。例如,一个类可能只包含一个消息字符串,而另一个类可能包含许多记录更新的整数。

        【讨论】:

          【解决方案5】:

          返回原始整数(用于状态和类似的东西)甚至不通过常量隐藏它们的数字性质(或者如果语言不支持真正的常量,那么按照约定将变量视为常量)是一种非常糟糕的做法,即使在像 C 这样的老派语言中也是如此。它是许多错误和无休止的头痛的根源。

          此外,C# 风格的枚举提供(某些)类型安全性,并为各种错误和错误腾出更少的空间。你绝对应该使用它们。因此,这确实是对返回整数然后将其与整数常量进行比较的改进。如果语言提供了有用的功能,为什么不使用它?

          【讨论】:

            【解决方案6】:

            Pontus Gagge 说得对:将您的方法包装在一个类中并通过属性公开状态。

            另外,请记住使用枚举的危险:您可以将任何整数转换为任何枚举。这将编译并运行得很好:

            public enum Status
            {
                Good,
                Bad,
                Indifferent
            };
            
            public class Program
            {
                static void Main(string[] args)
                {
                    Status s = (Status) 30;
                }
            }
            

            假设枚举类型的变量包含其中一个可能值基本上是不安全的;它可能包含一个不可能的值。

            【讨论】:

              【解决方案7】:

              我一直在考虑这个(并使用了一点点),我发现只返回一个布尔值、一个整数或一直到过度创建一个类来返回状态和一些值会更有帮助与该状态相关联,我真的觉得返回一个简单枚举很实用:我的代码似乎更具可读性,而且我没有异常的所有负担,因为,正如我所读到的:异常应该是异常的 =)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-08-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-01-10
                • 1970-01-01
                相关资源
                最近更新 更多