Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# 如何将foreach循环故障详细信息传递给Catch块_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 如何将foreach循环故障详细信息传递给Catch块

C# 如何将foreach循环故障详细信息传递给Catch块,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一些C#代码,其中使用foreach循环从外部网站检索数据,并将其匹配并插入数据库。这是一个不易破坏的,所以我用try/catch块将其包围。我想传递循环失败的集合成员的详细信息(在本例中是Player.Name属性) 然而,当我捕捉到异常时,我得到的只是一条空引用异常消息,没有任何错误起源的详细信息。是否有方法将此信息传递到catch块,以便我可以将其发送到我的视图 try { document = getHtmlWeb.Load("ht

我有一些C#代码,其中使用foreach循环从外部网站检索数据,并将其匹配并插入数据库。这是一个不易破坏的,所以我用try/catch块将其包围。我想传递循环失败的集合成员的详细信息(在本例中是Player.Name属性)

然而,当我捕捉到异常时,我得到的只是一条空引用异常消息,没有任何错误起源的详细信息。是否有方法将此信息传递到catch块,以便我可以将其发送到我的视图

      try
        {
            document = getHtmlWeb.Load("http://example.com/");

            foreach (Player player in players)
            {
                string pointsString="ExampleString"+player.Name;

                    pointsString = document.DocumentNode
                    .SelectSingleNode(pointsString)
                    .InnerText;

            // other code inserting data to database
            }


            return View();

        }
        catch (Exception)
        {
            return View("Error");
        }

首先,我看不到您的代码中设置了播放器,所以这可能解释了空引用。其次,我建议您创建自己的异常类。如果您这样做,您可以添加任何您喜欢的属性


首先,我看不到您的代码中设置了播放器,因此这可能解释了空引用。其次,我建议您创建自己的异常类。如果您这样做,您可以添加任何您喜欢的属性


首先,我看不到您的代码中设置了播放器,因此这可能解释了空引用。其次,我建议您创建自己的异常类。如果您这样做,您可以添加任何您喜欢的属性


首先,我看不到您的代码中设置了播放器,因此这可能解释了空引用。其次,我建议您创建自己的异常类。如果您这样做,您可以添加任何您喜欢的属性


您有两个选择-最佳选择:将try/catch移动到foreach循环中,以便访问您的播放器:

foreach (Player player in players)
{
    try
    {
        string pointsString="ExampleString"+player.Name;
        pointsString = document.DocumentNode
        .SelectSingleNode(pointsString)
        .InnerText;
    }
    catch (Exception ex)
    {
        // Use player here, break out of the 
        // foreach loop if necessary.
        return View("Error at player " + player.Name);
    }
}
或者,您可以将最后一个玩家存储在您的try/catch之外:

Player lastPlayerParsed;

try
{
    document = getHtmlWeb.Load("http://example.com/");

    foreach (Player player in players)
    {
        lastPlayerParsed = player;
        string pointsString="ExampleString"+player.Name;

            pointsString = document.DocumentNode
            .SelectSingleNode(pointsString)
            .InnerText;
    }

    return View();
}
catch (Exception)
{
    if (lastPlayerParsed != null) // It could bomb before the foreach!
    {
        return View("Error at player " + lastPlayerParsed.Name);
    }
}
Edit:在旁注中,如果您复制的代码是准确的,则您的
NullReferenceException
实际上可能是由foreach循环中的大写字母引起的:

foreach (Player player in players)
{
    string pointsString= "ExampleString" + Player.Name;

您可能是想让
Player
在这里小写,因为
Player.Name
将引用
Player
类上的静态属性。

您有两个选项-最佳选项:将try/catch移动到foreach循环中,这样您就可以访问您的播放器:

foreach (Player player in players)
{
    try
    {
        string pointsString="ExampleString"+player.Name;
        pointsString = document.DocumentNode
        .SelectSingleNode(pointsString)
        .InnerText;
    }
    catch (Exception ex)
    {
        // Use player here, break out of the 
        // foreach loop if necessary.
        return View("Error at player " + player.Name);
    }
}
或者,您可以将最后一个玩家存储在您的try/catch之外:

Player lastPlayerParsed;

try
{
    document = getHtmlWeb.Load("http://example.com/");

    foreach (Player player in players)
    {
        lastPlayerParsed = player;
        string pointsString="ExampleString"+player.Name;

            pointsString = document.DocumentNode
            .SelectSingleNode(pointsString)
            .InnerText;
    }

    return View();
}
catch (Exception)
{
    if (lastPlayerParsed != null) // It could bomb before the foreach!
    {
        return View("Error at player " + lastPlayerParsed.Name);
    }
}
Edit:在旁注中,如果您复制的代码是准确的,则您的
NullReferenceException
实际上可能是由foreach循环中的大写字母引起的:

foreach (Player player in players)
{
    string pointsString= "ExampleString" + Player.Name;

您可能是想让
Player
在这里小写,因为
Player.Name
将引用
Player
类上的静态属性。

您有两个选项-最佳选项:将try/catch移动到foreach循环中,这样您就可以访问您的播放器:

foreach (Player player in players)
{
    try
    {
        string pointsString="ExampleString"+player.Name;
        pointsString = document.DocumentNode
        .SelectSingleNode(pointsString)
        .InnerText;
    }
    catch (Exception ex)
    {
        // Use player here, break out of the 
        // foreach loop if necessary.
        return View("Error at player " + player.Name);
    }
}
或者,您可以将最后一个玩家存储在您的try/catch之外:

Player lastPlayerParsed;

try
{
    document = getHtmlWeb.Load("http://example.com/");

    foreach (Player player in players)
    {
        lastPlayerParsed = player;
        string pointsString="ExampleString"+player.Name;

            pointsString = document.DocumentNode
            .SelectSingleNode(pointsString)
            .InnerText;
    }

    return View();
}
catch (Exception)
{
    if (lastPlayerParsed != null) // It could bomb before the foreach!
    {
        return View("Error at player " + lastPlayerParsed.Name);
    }
}
Edit:在旁注中,如果您复制的代码是准确的,则您的
NullReferenceException
实际上可能是由foreach循环中的大写字母引起的:

foreach (Player player in players)
{
    string pointsString= "ExampleString" + Player.Name;

您可能是想让
Player
在这里小写,因为
Player.Name
将引用
Player
类上的静态属性。

您有两个选项-最佳选项:将try/catch移动到foreach循环中,这样您就可以访问您的播放器:

foreach (Player player in players)
{
    try
    {
        string pointsString="ExampleString"+player.Name;
        pointsString = document.DocumentNode
        .SelectSingleNode(pointsString)
        .InnerText;
    }
    catch (Exception ex)
    {
        // Use player here, break out of the 
        // foreach loop if necessary.
        return View("Error at player " + player.Name);
    }
}
或者,您可以将最后一个玩家存储在您的try/catch之外:

Player lastPlayerParsed;

try
{
    document = getHtmlWeb.Load("http://example.com/");

    foreach (Player player in players)
    {
        lastPlayerParsed = player;
        string pointsString="ExampleString"+player.Name;

            pointsString = document.DocumentNode
            .SelectSingleNode(pointsString)
            .InnerText;
    }

    return View();
}
catch (Exception)
{
    if (lastPlayerParsed != null) // It could bomb before the foreach!
    {
        return View("Error at player " + lastPlayerParsed.Name);
    }
}
Edit:在旁注中,如果您复制的代码是准确的,则您的
NullReferenceException
实际上可能是由foreach循环中的大写字母引起的:

foreach (Player player in players)
{
    string pointsString= "ExampleString" + Player.Name;

你的意思可能是让
Player
在这里小写,因为
Player.Name
将引用
Player
类上的静态属性。

谢谢,是的,当我在这里编辑代码时这只是一个输入错误谢谢,是的,当我在这里编辑代码时这只是一个输入错误谢谢,是的,当我在这里编辑代码时这只是一个输入错误谢谢,是的,那只是一个输入错误在这里编辑代码