如果某时值可以为null,我试图匹配Regex。但是问题是,当它返回null时,Regex.IsMatch(UPC, @"^\d+$")
会引发异常,如下面的图片Value can not be null
所示。所以我的问题是我该如何解决我的if条件,以便它不会在null值上引发异常?
c#代码:
XDocument doc = XDocument.Parse(responseStr);
XNamespace ns = doc.Root.GetDefaultNamespace();
string UPC = "";
string EAN = "";
if (doc.Descendants(ns + "Ack").FirstOrDefault().Value != "Failure")
{
if (Regex.IsMatch((string)doc.Descendants(ns + "UPC").FirstOrDefault(), @"^\d+$"))
{
UPC = (string)doc.Descendants(ns + "UPC").FirstOrDefault();
}
if (Regex.IsMatch((string)doc.Descendants(ns + "EAN").FirstOrDefault(), @"^\d+$"))
{
EAN = (string)doc.Descendants(ns + "EAN").FirstOrDefault();
}
}
错误图片:
答案 0 :(得分:2)
请不要调用具有空值的方法。首先将XML中的值存储在本地变量中,然后可以使用同一变量轻松进行操作:
示例代码:
XDocument doc = XDocument.Parse(responseStr);
XNamespace ns = doc.Root.GetDefaultNamespace();
string upc = "";
string ean = "";
if (doc.Descendants(ns + "Ack").FirstOrDefault().Value != "Failure")
{
string candidateUpc = (string) doc.Descendants(ns + "UPC").FirstOrDefault();
if (candidateUpc != null && Regex.IsMatch(candidateUpc, @"^\d+$"))
{
upc = candidateUpc;
}
string candidateEan = (string) doc.Descendants(ns + "EAN").FirstOrDefault();
if (candidateEan != null && Regex.IsMatch(candidateEan, @"^\d+$"))
{
ean = candidateEan;
}
}