1

我似乎在视觉工作室收到一条错误消息说

Value cannot be null.
Parameter name: input

当我尝试做 Match BirthYear2 = Regex.Match(kvpInd2.Value.birth.date, BirthPattern2);

我想知道是否可以允许 Match 函数产生空值?基本上,我不介意如果kvpInd2.Value.birth.date不包含表达式

谢谢

4

4 回答 4

10

在您的情况下,Regex.Match产生a null,而是将a作为其第一个参数传递。null

异常: ArgumentNullException -inputpattern为空。

如果您想让null输入有效,您可以按如下方式更改您的调用:

Match BirthYear2 = Regex.Match(kvpInd2.Value.birth.date ?? "", BirthPattern2);

这将在is时返回不匹配(假设BirthPattern2不匹配空字符串),而不是抛出异常。kvpInd2.Value.birth.datenull

于 2012-05-31T17:46:03.250 回答
4

这里最可能的问题kvpInd2.Value.birth.datenull. Regex.Match如果找不到模式,则不会抛出异常,但如果输入为空,则会抛出您看到的异常。

于 2012-05-31T17:46:17.380 回答
0

只需在匹配之前检查该值是否为空。完毕。或者,我错过了什么?另一种选择,我想你可以这样做:kvpInd2.Value.birth.date ?? "". 这会将 null 视为一个空字符串,(希望)您的模式将不匹配。

于 2012-05-31T17:45:50.567 回答
0

在访问所有该属性链之前,您需要检查链中是否没有对象为空。

if(kvpInd2 != null && kvpInd2.Value != null && kvpInd2.Value.birth != null && kvpInd2.Value.birth.date!= null) {
    Match BirthYear2 = Regex.Match(kvpInd2.Value.birth.date, BirthPattern2);
    ...
}
于 2012-05-31T17:48:36.323 回答