C#-异常记录和返回状态

C#-异常记录和返回状态,c#,exception,C#,Exception,修改以澄清: 我有一个关于异常记录和退出的问题。这是上一篇文章的延续。代码如下所示: string status = "0"; ClassA ObjA = new ClassA(); try { status = objA.Method1(); if (status != "-1") { status = objA.Method1(); } } catch (Exception Ex) {

修改以澄清:

我有一个关于异常记录和退出的问题。这是上一篇文章的延续。代码如下所示:

string status = "0";
ClassA ObjA = new ClassA();

try
{
    status = objA.Method1();
    if (status != "-1")
    {                        
        status = objA.Method1();
    }
 }
 catch (Exception Ex)
 {
     //Log Exception EX
 }
在方法1中:

public string Method1()
{
    string status = "0";
    try
    {
        //Code
        return "0";
    }
    catch (Exception Ex)
    {
        //Log Exception with details
        return "-1"
    }
}
我在调用方法中记录
异常
,只向调用方返回状态。
我应该将
异常
返回给调用方法,还是只返回一个状态就足够了。状态为“-1”时,我知道调用的方法中有一个
异常
,该
异常的详细信息记录在一个日志文件中。

我认为如果您有很多状态代码,可以这样做,否则您也可以抛出一个异常并在更高的方法中捕获它


也可以重新考虑您的退货类型。看起来您可能在使用整数,但认为您在使用字符串时容易出错。

这取决于代码的用途和实现;有时,最好允许异常传回调用方——它们应该在中使用


但是,如果您确实打算使用返回代码,我更倾向于使用
enum
(不过,这同样取决于代码的用途)。这样,调用者就可以很容易地检查返回代码的可用选择。另外,关于使用整数或字符串作为错误代码的注释-调用者可能不太了解问题所在。在这种情况下,抛出
异常
或特定类型(包含错误消息),或返回带有描述性名称的预定义
枚举
,对调用者更有意义。

从这些没有任何作用的短代码片段中,很难说出什么是最佳做法


通常,最好将异常推送到处理得最好的位置。如果您正在编写一个与某些Web服务接口的框架,那么您框架的用户很可能不关心网络异常等-他们想要返回代码,或者更好的是您包含的一些特定于框架的异常/code.

Hm-在您的情况下,我宁愿做以下事情,但这要视情况而定:

public string Method1()
{
    string status = "0";

    //Code - Exception may be thrown
    return "0";
}

string status = "0";
ClassA ObjA = new ClassA();
try
{
     status = objA.Method1();
 }
 Catch(Exception Ex)
 {
     //Log Exception EX
    status = "-1;
 }
编辑
有时很难定义指示方法中是否发生错误的值。您应该记住
Nullable
类型。如果可以找到指示错误的适当返回值,那么也可以在导致错误的方法中记录错误,并按照建议对返回值作出反应


顺便说一下:如果第一次调用成功,则在代码中调用
Method1
两次。我想这是因为它是一个快速示例…

不要使用
状态返回值,它不会添加任何对您有用的内容

class MyException : Exception
{
   public readonly int status;
   public  MyException(int status, string msg):base(msg)
   {
      this.status = status;
   }
}

public string Method1()
{   
   throw new MyException(-1,"msg");
    return "0";
}




SomeCode()
    {

         try
         {
                  Method1();
         }catch(MyException ex)
         { 
            ex.status //here you get the status
          }
     }
考虑一下

var a = new ClassA()
try
{
    a.Mehtod1();
}
catch
{
    try
    {
        a.Method1();
    }
    catch (Exception ex)
    {
        //Log without details;
    }
}

class ClassA
{
    void Method1()
    {
        try
        {
             //Code
        }
        catch (Exception ex)
        {
            //Log with details
            throw;
        }            
    }
}
这段代码实现了相同的功能,但将函数的返回代码留给了一些有用且非异常的东西


更一般地说,我建议在应用程序的顶层有一个处理日志记录的全面处理程序,或者每个公共入口点最多有一个。其他处理程序应该处理它们实际上可以“处理”(做点什么)的特定异常类型。

“最佳实践”:出于什么目的?我应该将异常返回到调用方法还是只返回状态就足够了。状态为-1时,我知道被调用方法中存在异常,并且在日志文件中记录了异常的详细信息。您是否考虑过代码复查:?不,我现在只检查了Stackoverflow。谢谢您的回答。这是用于调用服务的。这是一个工具,但我会学习使它更干净,更好的代码。