gpt4 book ai didi

c# - 我可以过滤此委托(delegate)以检查是否重复任何名称并删除

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:37 25 4
gpt4 key购买 nike

所以我有这个代表:

   private static readonly Func<GetAddress, GetNames> ConvertAddress = a => new Address() {
StreetNumber = a.streetNumber,
City = a.city,
State = a.state,
zip = a.zip,
firstName = a.firstName,
LastName = a.lastName
};

我这样调用它:

ADRESS = o.Addresses.Select(ConvertAddress).First(), ... 

所以我想对名字和姓氏进行某种筛选。如果它们被使用过一次,我希望下次调用时它们为空。不是 null 的地址,而是名称。

所以如果 john johnson 经历了两次,我希望 john johnson 第二次经历这个时将他的名字分配给“”或 null。

最佳答案

显然,您需要在调用的每个实例之间共享某种状态。最简洁的方法是将其传入,这样您的函数就会变成如下所示:

private static readonly Func<GetAddress, ISet<string>, GetNames> ConvertAddress = a, usedNames => 
{
var fullName = string.Format("{0} {1}", a.FirstName, a.LastName);
var fullNameHasBeenUsed = usedNames.Contains(fullName);
usedNames.Add(fullName);
return new Address() {
StreetNumber = a.streetNumber,
City = a.city,
State = a.state,
zip = a.zip,
firstName = fullNameHasBeenUsed ? null : a.firstName,
LastName = fullNameHasBeenUsed ? null : a.lastName
};}

然后你会这样调用它:

var usedFirstNames = new HashSet<string>();
ADRESS = o.Addresses.Select(a => ConvertAddress(a, usedFirstNames)).First()

关于c# - 我可以过滤此委托(delegate)以检查是否重复任何名称并删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26020982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com