Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
如何将变量从方法发送到调用方的catch块';c#中的s方法?_C#_Variables_Exception - Fatal编程技术网

如何将变量从方法发送到调用方的catch块';c#中的s方法?

如何将变量从方法发送到调用方的catch块';c#中的s方法?,c#,variables,exception,C#,Variables,Exception,假设我有一个这样的方法 Boolean hasErrors = false; try { var anotherId = DoSomethingWithList(list); } catch (Exception ex) { errorMessageDetail.Text = ex.Message; hasErrors = true; } 在我的DoSomethingWithList方法中,我在一次迭代中做了一些奇特的事情 public Guid? DoSomethin

假设我有一个这样的方法

Boolean hasErrors = false;
try
{
    var anotherId = DoSomethingWithList(list);
}
catch (Exception ex)
{
    errorMessageDetail.Text = ex.Message;
    hasErrors = true;
}
在我的
DoSomethingWithList
方法中,我在一次迭代中做了一些奇特的事情

public Guid? DoSomethingWithList(List<ofthings> myList)
{
    foreach (var member in myList)
    {
          //Do fancy and dangerous stuff in here.
    }
}
公共Guid?DoSomethingWithList(列表myList)
{
foreach(myList中的var成员)
{
//在这里做些新奇和危险的事情。
}
}
我试图实现的是,当我在
DoSomethingWithList
方法中获得异常时,我还想知道该异常是在列表的哪个成员中抛出的,并将其包含在
errorMessageDetail
中。先谢谢你


编辑:我不能简单地将异常块移动到循环本身中,因为
errorMessageDetail
与前端的aspx连接,而我的
DoSomethingWithList
方法位于我的业务层

您可以创建特定的异常类型。例如

public Guid? DoSomethingWithList(List<ofthings> myList)
{
    foreach (var member in myList)
    {
        try
        {
          //Do fancy and dangerous stuff in here.
        }
        catch (Exception ex)
        {
             throw new ListProcessingException(member, ex);
        }
    }
}
公共Guid?DoSomethingWithList(列表myList)
{
foreach(myList中的var成员)
{
尝试
{
//在这里做些新奇和危险的事情。
}
捕获(例外情况除外)
{
抛出新的ListProcessingException(成员,ex);
}
}
}

您可以创建特定的异常类型。例如

public Guid? DoSomethingWithList(List<ofthings> myList)
{
    foreach (var member in myList)
    {
        try
        {
          //Do fancy and dangerous stuff in here.
        }
        catch (Exception ex)
        {
             throw new ListProcessingException(member, ex);
        }
    }
}
公共Guid?DoSomethingWithList(列表myList)
{
foreach(myList中的var成员)
{
尝试
{
//在这里做些新奇和危险的事情。
}
捕获(例外情况除外)
{
抛出新的ListProcessingException(成员,ex);
}
}
}
试试这个

public Guid? DoSomethingWithList(List<ofthings> myList){
foreach (var member in myList){
    try{
      //Do fancy and dangerous stuff in here.
    }
    catch(Exception e){
        throw new Exception(string.Format("{0} thrown by {1}", e.Message, member.ToString()), e);    
    }
}
公共Guid?DoSomethingWithList(列表myList){
foreach(myList中的var成员){
试一试{
//在这里做些新奇和危险的事情。
}
捕获(例外e){
抛出新异常(string.Format({1}抛出的{0}),例如Message,member.ToString()),e);
}
}
我假设member有一个合适的ToString()实现,否则只需使用相关的属性即可。

试试这个

public Guid? DoSomethingWithList(List<ofthings> myList){
foreach (var member in myList){
    try{
      //Do fancy and dangerous stuff in here.
    }
    catch(Exception e){
        throw new Exception(string.Format("{0} thrown by {1}", e.Message, member.ToString()), e);    
    }
}
public Guid?DoSomethingWithList(列表myList){
foreach(myList中的var成员){
试一试{
//在这里做些新奇和危险的事情。
}
捕获(例外e){
抛出新异常(string.Format({1}抛出的{0}),例如Message,member.ToString()),e);
}
}

我假设成员有一个合适的ToString()实现,否则只需使用任何相关的属性。

如果出现错误,从
DoSomethingWithList
返回状态的唯一方法是将其功能包装在另一个try catch中,如@Stefan Steinegger所说

因为如果您没有捕获到异常,那么(线程/调用堆栈)将被终止,因此堆栈帧将被终止。
(堆栈帧是存储局部变量的地方)

DoSomethingWithList
返回状态的唯一方法是将其功能包装在另一个try-catch中,如@Stefan Steinegger所说

因为如果您没有捕获到异常,那么(线程/调用堆栈)将被终止,因此堆栈帧将被终止。
(堆栈帧是存储局部变量的位置)

然后将try/catch块放入循环中。重新显示详细的异常。是否希望自定义异常以包括“导致异常的列表成员”。您不应该使用异常编码失败。异常应该针对异常情况。捕获并处理这些异常-不要让它们冒泡并使用通用异常处理程序捕获。如果向用户公开异常详细信息是合理的话(并且你需要仔细考虑这个问题而不是假设它)然后请使用<代码> toStrug()而不是
消息
,这样您就可以提供包括堆栈跟踪在内的详细信息,而不仅仅是一条裸消息。然后将try/catch块放入循环中。重新显示详细的异常。是否希望自定义异常以包括“导致异常的列表成员”。您不应该使用异常编码失败。异常应该针对异常情况。捕获并处理这些异常-不要让它们冒泡并使用通用异常处理程序捕获。如果向用户公开异常详细信息是合理的话(并且你需要仔细考虑这个问题而不是仅仅假设它)然后请使用<代码> toStrug()/<代码>而不是<代码>消息< /代码>,这样你就可以提供包括堆栈跟踪的细节,而不仅仅是一个裸露的消息。不需要调用<代码> toStrug()。关于你作为参数传递给
string.Format
。它已经为你做了。@Damien\u不信者公正的评论,但它给了我一些东西,让我可以挂起我关于它有一个合适的实现的评论。谢谢大家的回复。实际上@Stefan的回复也很好,但是这个回复对我来说,实现起来更简单,并且在代码中提供了与我想要的完全相同的内容。这是在excel文件行的文件输入中执行的,我刚刚将
member.toString()
替换为一个用作行计数器的整数变量。因此,输出消息类似于
您在第行有错误{myCounter}
:)没有必要调用
ToString()
关于你作为参数传递给
string.Format
。它已经为你做了。@Damien\u不信者公正的评论,但它给了我一些东西,让我可以挂起我关于它有一个合适的实现的评论。谢谢大家的回复。实际上@Stefan的回复也很好,但是这个回复对我来说,实现起来更简单,并在代码中提供了我想要的东西。这是在excel文件行的文件输入中执行的,我刚刚将
member.toString()
替换为用作行计数器的整数变量。因此,输出消息已成为