.NET必须指定有效信息吗?

时间:2018-03-03 15:35:21

标签: c# .net asp.net-mvc

这段代码在其他地方工作正常,唯一改变的是它现在在循环中,我按项目调用变量。而不是模型。当我预先定义newurl并且页面内容包含代码工作并且它将生命解析为“实时”这是正确的所以我觉得它与此有关吗?但是我收到以下错误:

  

异常详细信息:System.ArgumentException:必须指定用于在字符串中进行解析的有效信息。

在这一行:

lives = "Live";

我之后确实有这个:

else
{
    lives = "Dead";
}

但是,我删除它以找到错误,否则它只是解析并将变量设置为死。

枚举

public enum Live
{
    Indexed, Live, Dead
}

虽然它表明它与变量有关吗?我尝试将对象的另一个变量设置为newurl字符串以检查它是否正确,它是。我也尝试过预定义newurl但不包含页面包含它仍然不起作用所以这两个都有问题吗?

所以我知道item.Anchor等正确地引入变量它似乎没有转化为工作?

代码

public ActionResult CheckLinks(Link model)
{
    var items = db.Links.Where(p => p.UserTable.ID == UserTableID).ToList();
    foreach (var item in items)
    {
        string pageContent = null;
        string visiturl = "http://webcache.googleusercontent.com/search?q=cache:" + "http://" + item.Identifier.domain + item.Obdomain;
        HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(visiturl);
        HttpWebResponse myres = (HttpWebResponse)myReq.GetResponse();

        using (StreamReader sr = new StreamReader(myres.GetResponseStream()))
        {
            pageContent = sr.ReadToEnd();
        }
        string lives = "";
        if (pageContent.Contains(item.Anchor))
        {
            lives = "Indexed";
        }
        else
        {
            string newurl = "http://" + item.Identifier.domain + item.Obdomain;
            HttpWebRequest newReq = (HttpWebRequest)WebRequest.Create(newurl);
            HttpWebResponse newres = (HttpWebResponse)newReq.GetResponse();

            using (StreamReader sr = new StreamReader(newres.GetResponseStream()))
            {
                pageContent = sr.ReadToEnd();
            }
            if (pageContent.Contains(item.Anchor))
            {
                lives = "Live";
            }

            var link = db.Links.SingleOrDefault(c => c.LinkID == item.LinkID);
            link.live = (Link.Live)Enum.Parse(typeof(Link.Live), lives);
            db.Entry(link).State = EntityState.Modified;
        }
        db.SaveChanges();
    }
    return RedirectToAction("Index");
}

1 个答案:

答案 0 :(得分:0)

问题在于您的if-else逻辑。 lives的值可能是一个空字符串,无法正确解析。

string lives = "";
if (pageContent.Contains(item.Anchor))
{
    lives = "Indexed";
}
else
{
    // ...
    if (pageContent.Contains(item.Anchor))
    {
        lives = "Live";
    }
    // We can have lives == "" at this point, which Enum.Parse won't process

    // ...
}

最好的猜测是你打算默认为Dead,因此它会正确解析。

string lives = "Dead";
  

但是,既然你在发布问题之前已经exhaustively debugged,那么你已经知道了。正确?

正如评论中所提到的,无论如何在这里使用字符串并没有多大意义。这样编译器就可以检测到您的错误,并阻止您使用它进行编译。

Link.Live lives = Link.Live.Dead;
if (pageContent.Contains(item.Anchor))
{
    lives = Link.Live.Indexed;
}
else
{
    // ...
    if (pageContent.Contains(item.Anchor))
    {
        lives = Link.Live.Live;
    }
    // No need to parse from a string...

    // ...
}