使用枚举作为状态返回C#中的状态指示符

时间:2009-03-06 23:05:54

标签: c# design-patterns enums

只是想知道关于从指示状态的方法返回枚举的一般共识是什么。返回代码(int)的概念在oldschool系统编程(C)中非常天生,但我想知道指示状态的方法是否已经改变。

感谢

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

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

7 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

由于enum基本上只是一个int,它会工作得很好。你可以获得intellisense的额外奖励。

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

答案 3 :(得分:1)

返回原始整数(用于状态和类似的东西),甚至不用常量隐藏它们的数字性质(或者如果语言不支持实常数,那么按惯例处理为常量的变量)是一种非常糟糕的做法,甚至像C这样的老式语言也是如此。它是许多错误和无尽头痛的源头。

此外,C#-style枚举提供(某些)类型安全性,并为各种错误和错误提供更少的空间。你一定要使用它们。因此,它实际上比返回一个整数然后将其与整数常量进行比较有所改进。如果语言提供了usefule功能,为什么不使用它?

答案 4 :(得分:1)

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

答案 5 :(得分:0)

Pontus Gagge没错:将你的方法包装在一个类中,并通过属性公开状态。

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

public enum Status
{
    Good,
    Bad,
    Indifferent
};

public class Program
{
    static void Main(string[] args)
    {
        Status s = (Status) 30;
    }
}

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

答案 6 :(得分:0)

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