C#中Regex.Escape抛出ArgumentNullException异常的解决方法问询
你遇到的语法报错是因为C#插值字符串中冒号:会默认被识别为值的格式说明符,和三元运算符的语法冲突,必须将整个三元表达式用小括号包裹才能正常解析。
你不需要引入额外变量,直接用空合并运算符??即可满足需求,在搜索字段为null时给Regex.Escape传入空字符串,避免触发空参数异常:
var recipientFirstNameFilter = BuildFilterDefinition( Builders<Transaction>.Filter.Regex( _ => _.Recipient.FirstName, new($"/.*{Regex.Escape(query.RecipientFirstName ?? string.Empty)}.*/i") ), query.RecipientFirstName );
如果后续需要更复杂的非空判断逻辑,也可以用包裹括号的三元运算符写法:
var recipientFirstNameFilter = BuildFilterDefinition( Builders<Transaction>.Filter.Regex( _ => _.Recipient.FirstName, new($"/.*{(query.RecipientFirstName != null ? Regex.Escape(query.RecipientFirstName) : string.Empty)}.*/i") ), query.RecipientFirstName );
因为你封装的BuildFilterDefinition方法本身已对空/空白的搜索文本做了过滤,会直接返回空过滤器,所以上述写法不会影响原有的过滤逻辑。
内容的提问来源于stack exchange,提问作者Kgn-web
相关产品推荐
相关产品推荐

