【发布时间】:2021-09-22 09:23:36
【问题描述】:
我有正则表达式来匹配输入字符串,但是当输入字符串为空时,我得到以下错误
抛出异常:System.Text.RegularExpressions.dll 中的“System.ArgumentNullException”
这就是我的方法的样子
public async Task<PagedResult<Transaction>> Find(FindTransactionQuery query, CancellationToken cancellationToken)
{
var recipientFirstNameFilter =
BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Recipient.FirstName, new($"/.*{ Regex.Escape(query.RecipientFirstName)}.*/i")), query.RecipientFirstName);
var senderFirstNameFilter =
BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Sender.FirstName, new($"/.*{Regex.Escape(query.SenderFirstName)}.*/i")), query.SenderFirstName);
//& so on
}
private static FilterDefinition<Transaction> BuildFilterDefinition(FilterDefinition<Transaction> transactionFilter, string searchText) =>
string.IsNullOrWhiteSpace(searchText)
? Builders<Transaction>.Filter.Empty
: transactionFilter;
我尝试使用以下条件运算符,但不允许:
var recipientFirstNameFilter = BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Recipient.FirstName,
//here
new($"/.*{query.RecipientFirstName!= null ? Regex.Escape(query.RecipientFirstName) :query.RecipientFirstName}.*/i")), query.RecipientFirstName);
是的,一种解决方案是再添加一个变量 *& 检查 null,但为此引入一个额外的变量并没有多大吸引力。
有没有我可以做的类似的事情!?? (不是 Null)然后构建正则表达式?
谢谢!
【问题讨论】:
-
在
(..):new($"/.*{(query.RecipientFirstName!= null ? Regex.Escape(query.RecipientFirstName) :query.RecipientFirstName)}.*/i")}, query.RecipientFirstName);中包装三元运算符。请注意,字符串插值中的:表示格式规范,我们有冲突;这就是为什么我们必须包含(..)