C# 异常处理UWP

C# 异常处理UWP,c#,uwp,C#,Uwp,我开始为UWP(通用Windows平台)编写我的第一个程序。我喜欢C#,我读到了关于try-catch-block获取异常的文章。 我的应用程序有一个特殊的结构,我想得到一些关于最佳异常处理的建议 我的设置如下: 我有一个名为MainPage的页面,其方法是GetInformation 我有两个类,分别是GetSetting和GetConnection。通过主页的GetInformation,我从用户那里获取输入并将其发送到GetConnections。在该方法中,我然后调用GetSetting

我开始为UWP(通用Windows平台)编写我的第一个程序。我喜欢C#,我读到了关于try-catch-block获取异常的文章。
我的应用程序有一个特殊的结构,我想得到一些关于最佳异常处理的建议

我的设置如下:
我有一个名为MainPage的页面,其方法是GetInformation
我有两个类,分别是GetSettingGetConnection。通过主页的GetInformation,我从用户那里获取输入并将其发送到GetConnections。在该方法中,我然后调用GetSetting(嵌套方法)

这是我的结构。现在我知道每个部分都可能发生错误:用户输入无效,或者我无法连接到表单系统,可能无法访问设置文件,或者其他一些错误。因此,我在我的应用程序的每个部分都添加了try-catch块(因此在GetInformationGetConnectionGetSetting

  • 我读过关于Message Dialog的文章,但它是一种异步方法:如果我尝试向应用程序的每个部分添加一个Message Dialog,但如果每个部分都有错误,那么我会得到3个Message Dialog。我不想通过添加task和Wait来让我的应用程序变得不清晰,因为它只是我应用程序的一部分。我在应用程序中找不到停止并强制等待用户输入的任何方法。所以我不再用这种方式
  • 我尝试了第二种方法:在我的主页中添加一个控件来显示错误消息。这给了我另一个问题:无法从所有嵌套方法返回(我查找了一个,但没有找到)。但是在GetConnectionGetSetting内部,我无法访问UI元素。因此,我必须再次在try-catch块中抛出异常,直到进入主页。但使用这种方法,我无法显示有关该异常的任何特殊信息。我想保留我的异常,我不想创建新异常并将其抛出到主页,因为StackTrace是只读的,所以我不能为我的新异常设置它,所以我只抛出由应用程序创建的异常,并且我不能添加任何特殊信息
这是我的方式,两者都有一些问题。在这种情况下,处理异常的最佳方法是什么

更新:

public string GetInformation()
{
    // Some codes here
    var data = GetConnection();
    // Some code here that use data
    // Some other codes
}
public string GetConnection() // In class Connection
{
    // Some codes here
    var data = GetSetting();
    // Some code here that use data
    // Some other codes
}
public string GetSetting() // in class Setting
{
    // Some codes here
}
这是我的密码。在代码的每一部分,比如“这里有一些代码”,都可能发生错误。
最好的方法是什么?

您需要在最后一步中添加Validation()方法,以获取可能发生或不发生的错误

GetInformation()
{
返回信息;
}
GetConnection()
{
回路连接;
}
GetSetting()
{
返回设置;

}
捕获异常并显示消息时,您可以返回

public void Get()
{
    //Your code

    string returnValue;
    try
    {
        returnValue = GetInformation();
    }
    catch (Exception)
    {
        return;
    }

    //Code that will not cause exception

    try
    {
        //Another possible line of causing exception
    }
    catch (Exception)
    {
        //Error Message
        return;
    }

    //Codes that will not cause exception
}

public string GetInformation()
{
    try
    {
        //Your Code
    }
    catch (Exception e)
    {
        //Error message
        throw new Exception();
    }
}

谢谢你的评论。你能再解释一下吗?我在我的问题中添加了更多的信息。您好@Bor,如果您在//some code部分//中遇到任何错误,请使用bool变量或在返回的变量中附加“error string”。因此,在validation method中,您可以识别erro标准并在messageDialogDo中发出通知,您的意思是返回bool值进行验证。这让我的应用程序不清楚,因为我的方法返回的值不是bool,所以我必须使用tuple返回两个或更多值,并且我必须验证tuple.Item1,等等,所以很不清楚。当你得到一个异常时,你想做什么?我想显示一些信息,比如发生错误的方法的位置,比如myApp.GetInformation和一些其他信息,然后是一个向我发送报告的按钮。所以当你遇到错误时,你想停止进一步执行
GetInformation()
方法。我说得对吗?是的。这就是我的问题。谢谢你的回答,但我的问题是信息!!对于返回字符串或对象的方法,我只能返回null或string.empty,但对于int或double或etc,我无法执行任何操作(因为我的答案可能是0),另一个问题是我无法发送特殊信息。我可以在父方法上验证值,但我无法从发生错误的地方获取任何信息。例如一些特殊值等@Bor我已经更新了答案。您可以在父方法中捕获
异常
。再次感谢,但可能您不理解我的问题。若发生了任何错误,那个么我会在Get方法中捕捉到它,所以我不知道从哪里来,因为我在Get方法中捕捉到了它。如果我在GetInformation方法中捕获它,那么因为应用程序在显示消息后不会停止,所以如果Get中发生任何其他错误,我将显示另一条消息。所以我收到两条信息。这是消息的问题,我还需要一些其他的东西。所以,在“var returnValue=GetInformation();”之后,我们有一些其他的代码,可能会发生另一个错误。所以我想在try-catch块中为这一点提供一个好消息。所以我在Get方法的catch块中添加了一条消息。有了你的代码和我的找零,我得到了两条信息@Bor那么你想什么时候显示消息?