c# - 定义返回状态码

标签 c#

这是一个非常笼统且可能是常见的问题,但我无法在网上找到答案。

我正在寻找一种合理的方法来为可能在某些部分失败但在其他部分仍然成功的应用程序创建状态代码。

假设我有一个应用程序运行某种算法。 在我们得到结果后,应用程序应该做 3 件事:

  1. 通过电子邮件发送结果
  2. 将结果保存到Db
  3. 将结果发送到另一个集成的国外应用程序。

我需要创建一个状态代码,其中包含每个独立步骤的状态,并且可以指示单个或多个失败。

有什么常见的做法吗?

最佳答案

你应该使用标志枚举:

[Flags]
public enum Options 
{
  None    = 0,
  Option1 = 1,
  Option2 = 2,
  Option3 = 4,
  Option4 = 8
}

https://msdn.microsoft.com/library/ms229062(v=vs.100).aspx

在这里你可以找到一些很好的例子 .HasFlag https://msdn.microsoft.com/en-us/library/system.enum.hasflag(v=vs.110).aspx

在你的情况下它可能是这样的(当然它可以扩展,它真的取决于你的设计和要求):

[Flags]
public enum ReturnStatus
{
  NoErrors = 0,
  DBError = 1,
  ThirdPartyError = 2,
  EmailError = 4,
  EmailSend = 8 
  //This could also be an option, so i just added it here as example, but i'm a bit confused if this is used as a return status or the current state of a task
  //Example: when database failed, and the algorithm doesn't event attempts to send a mail, and when you want to rerun a task it could be usefull
}

ReturnStatus ret = ReturnStatus.DBError | ReturnStatus.EmailError;

if( ret.HasFlag(ReturnStatus.EmailError) ) {
  //Email failed to send
}
if( ret.HasFlag(ReturnStatus.DBError) ) {
  //Db save failed
}

关于c# - 定义返回状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33759259/

相关文章:

c# - 为什么这个异常声称代码不写数据?

c# - 处理后的闭包有奇怪的行为

c# - 无法将 NULL 值插入字段 (DateTime)

c# - 所有 .NET 程序集在 Windows Server 上运行都非常慢

c# - 如何从 ServiceController 确定 Windows.Diagnostics.Process

C# 下载文件不起作用

c# - 是否可以在子类中使用重叠列使用 TPH 继承?

c# - .net 谷歌日历 API : anybody can create/update/delete events

c# - 接口(interface)属性名称因类而异

C#:使用代码将列添加到绑定(bind)的 DatagridView