Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类错误_C# - Fatal编程技术网

C# 类错误

C# 类错误,c#,C#,我是一名IT专业的学生,二年级。我们刚刚学会了用3层编程,一层用于获取类数据,一层用于处理请求(所有方法都在这里),另一层用于程序本身的工作。由于前两名进入课堂而不是表格,我不知道如何显示错误 例如: 我们需要制作一个带有webbrowser的登录系统和一些其他东西。所以我在一个类中登录,但是如何检查错误?我不认为这是正常的,甚至不可能做MessageBox.Show(错误);从类中,我只能返回内容,但如果可能的话,我希望返回用户名/id 简而言之,从类中报告由数据引起的错误的最佳/最被接受的方

我是一名IT专业的学生,二年级。我们刚刚学会了用3层编程,一层用于获取类数据,一层用于处理请求(所有方法都在这里),另一层用于程序本身的工作。由于前两名进入课堂而不是表格,我不知道如何显示错误

例如: 我们需要制作一个带有webbrowser的登录系统和一些其他东西。所以我在一个类中登录,但是如何检查错误?我不认为这是正常的,甚至不可能做MessageBox.Show(错误);从类中,我只能返回内容,但如果可能的话,我希望返回用户名/id


简而言之,从类中报告由数据引起的错误的最佳/最被接受的方法是什么?

您应该有一个类来验证数据对象并返回错误信息。然后,前端代码可以要求此类验证数据并显示返回的任何错误消息

var username = GetUserName();
var password = GetPassword();
var validationResult = new Validator().ValidateLogin(username, password);
if(validationResult.ErrorMessage != null) {
    MessageBox.Show(validationResult.ErrorMessage);
} else {
    // Do what you would have done.
}

如果发生任何超出预期逻辑流的错误,它们应该抛出异常。

您应该有一个类来验证数据对象并返回错误信息。然后,前端代码可以要求此类验证数据并显示返回的任何错误消息

var username = GetUserName();
var password = GetPassword();
var validationResult = new Validator().ValidateLogin(username, password);
if(validationResult.ErrorMessage != null) {
    MessageBox.Show(validationResult.ErrorMessage);
} else {
    // Do what you would have done.
}
class Login
{
  public Login()
  {

  }

  public bool CheckLogin(string userName, string password)
  {
   // Do your validation here. 
   If every thing goes fine 
     return True.
   else
     throw Exception("custom message.");
  }

}

class Input  //class which takes input.
{
  Login login = new Login();

  public void TakeInput(string username, string password)
  { 
     try
     {
        login.CheckLogin(username, password);
     }
     catch(Exception ex)
     { 
       MessageBox.show(ex.message);
     } 
  }  

}

如果发生任何超出预期逻辑流的错误,它们应该抛出异常。

您可以使用异常。您只需抛出异常,这取决于调用方如何处理异常

class Login
{
  public Login()
  {

  }

  public bool CheckLogin(string userName, string password)
  {
   // Do your validation here. 
   If every thing goes fine 
     return True.
   else
     throw Exception("custom message.");
  }

}

class Input  //class which takes input.
{
  Login login = new Login();

  public void TakeInput(string username, string password)
  { 
     try
     {
        login.CheckLogin(username, password);
     }
     catch(Exception ex)
     { 
       MessageBox.show(ex.message);
     } 
  }  

}

你可以使用异常。您只需抛出异常,这取决于调用方如何处理异常

class Login
{
  public Login()
  {

  }

  public bool CheckLogin(string userName, string password)
  {
   // Do your validation here. 
   If every thing goes fine 
     return True.
   else
     throw Exception("custom message.");
  }

}

class Input  //class which takes input.
{
  Login login = new Login();

  public void TakeInput(string username, string password)
  { 
     try
     {
        login.CheckLogin(username, password);
     }
     catch(Exception ex)
     { 
       MessageBox.show(ex.message);
     } 
  }  

}

您的框架级API(例如,您的层)应该对实际错误使用异常,并返回值以报告非关键错误

public class Login
{
    public bool AccountExists(string name) {
        bool exists;

        // do checking

        return exists;
    }

    public LoginResult Login(string name, string password) {
        // Try login
        // If successful
        return LoginResult.Success;

        // What if the user does not exist?
        return LoginResult.AccountNotFound;

        // What about an error?
        return LoginResult.Error;
    }
}

public enum LoginResult
{
    None,
    AccountNotFound,
    Error,
    Success
}
在上面的示例中,您可以通过返回值报告操作的状态。对于LoginResult,它甚至可以是一个值类型(struct),其中包含有关结果的更多信息(例如字符串消息或其他信息)。因为这些类型的操作都是非关键的,所以这里没有必要出现异常。异常代价高昂,报告错误并不总是必需的

现在让我们讨论另一种错误。逻辑开发人员错误。这些应该通过抛出异常来处理。以这个例子为例(假设我们有一个具有角色属性的类型帐户)

作为一名开发人员,我们知道帐户不应该为空,因此我们应该检查它,如果为空,则抛出异常。如果抛出此异常,则它是调用代码中的一个错误,应该进行修复,以避免传入空值

现在我已经给出了两个粗略的场景,这如何适用于您的问题?这些是API的。无论您的UI层是什么,无论是WinForm、WPF窗口、WebForm还是其他UI,UI都只需使用API。API负责报告UI可以使用的信息,UI负责以最适合该UI的方式显示信息

框架API层不应该负责向用户报告错误。他们应该只负责向开发人员报告错误,开发人员可以获取结果,并以某种方式将其连接到UI层。例如,您永远不会显示消息框或从框架API写入控制台。您将返回一些结果,UI可以使用这些结果显示自己的消息


我强烈建议你阅读。它涵盖了大量这类材料,是一本非常好的读物。

您的框架级API(例如,您的层)应该对实际错误使用异常,并返回值以报告非关键错误

public class Login
{
    public bool AccountExists(string name) {
        bool exists;

        // do checking

        return exists;
    }

    public LoginResult Login(string name, string password) {
        // Try login
        // If successful
        return LoginResult.Success;

        // What if the user does not exist?
        return LoginResult.AccountNotFound;

        // What about an error?
        return LoginResult.Error;
    }
}

public enum LoginResult
{
    None,
    AccountNotFound,
    Error,
    Success
}
在上面的示例中,您可以通过返回值报告操作的状态。对于LoginResult,它甚至可以是一个值类型(struct),其中包含有关结果的更多信息(例如字符串消息或其他信息)。因为这些类型的操作都是非关键的,所以这里没有必要出现异常。异常代价高昂,报告错误并不总是必需的

现在让我们讨论另一种错误。逻辑开发人员错误。这些应该通过抛出异常来处理。以这个例子为例(假设我们有一个具有角色属性的类型帐户)

作为一名开发人员,我们知道帐户不应该为空,因此我们应该检查它,如果为空,则抛出异常。如果抛出此异常,则它是调用代码中的一个错误,应该进行修复,以避免传入空值

现在我已经给出了两个粗略的场景,这如何适用于您的问题?这些是API的。无论您的UI层是什么,无论是WinForm、WPF窗口、WebForm还是其他UI,UI都只需使用API。API负责报告UI可以使用的信息,UI负责以最适合该UI的方式显示信息

框架API层不应该负责向用户报告错误。他们应该只负责向开发人员报告错误,开发人员可以获取结果,并以某种方式将其连接到UI层。例如,您永远不会显示消息框或从框架API写入控制台。您将返回一些结果,UI可以使用这些结果显示自己的消息


我强烈建议你阅读。这本书涵盖了很多这方面的内容,是一本非常好的读物。

我们当然是一点一点地学习,所以这本书还并没有涵盖。所以我不确定我是否应该读它,它可能会让我困惑,而不是帮助我。但我会看一看。但我有一个问题,公共枚举是做什么的?枚举是一组不同的名称,其基类型可以是sbyte、byte、short、ushort、int、uint、long或ulong。可以使用枚举来表示值集(例如,一周中的天数)。您还可以使用枚举来表示标志。请参阅本文。当然,我们一点一点地学习,所以这是