Regex.IsMatch处理空值

时间:2018-08-07 14:37:40

标签: c#

如果某时值可以为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();
    }
}

错误图片:

https://ibb.co/ko5bve

1 个答案:

答案 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;
    }
}