.NET 是否必须指定有效信息?



这段代码在其他地方工作正常,唯一改变的是它现在处于循环中,我按项目调用变量。 而不是模型。当我预定义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");
}

问题出在您的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";

但是,由于您在发布问题之前已经详尽地调试了它,因此您已经知道这一点。右?

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

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...
// ...
}

最新更新