C#将变量设置为if语句的结果



我正在尝试编写一个foreach循环,以循环通过用户许可证号码的数组,并将一个变量设置为许可证号码,其中许可证号码状态与列表状态匹配,否则将ln设置为数组中的第一个。我的代码在这里

var realEstateAgent = await realEstateAgentRepository.GetRealEstateAgentAsync(request.RealEstateAgentGuid);
var listing = await repository.GetListingAsync(new GetListingRequest { Guid = request.ListingGuid });
string realEstateAgentlicenseNumber = null;
Array.ForEach(realEstateAgent.LicenseNumbers, licensNumber  =>
{
if (licenseNumber.State == listing.Listing.State)
{
realEstateAgentlicenseNumber = licenseNumber.License;
}
else
{
realEstateAgentlicenseNumber = realEstateAgent.LicenseNumbers[0].LicenseNumber.License;
}
});

我正在努力理解和解决我在这里看到的错误

The type arguments for method 'Array.ForEach<T>(T[], Action<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

该错误只是意味着编译器无法推断您正在调用的ForEach方法的T的类型。

尝试Array.ForEach<NameOfTheTypeOfTheItem>(...)

类型将是realEstateAgent.LicenseNumbers中任何类型的项目。

此行的licenseNumber拼写错误:

Array.ForEach(realEstateAgent.LicenseNumbers, licensNumber  =>
realEstateAgent.LicenseNumbers

这应该是一个数组,如果列表试图调用,请确保它是一个阵列。ToArray((

房地产经纪人。许可证编号。ToArray((

我想看看这段代码是否可以简化。我不确定下面的方法是否有效,但值得一试!

如果房地产经纪人。LisenceNumber是IEnumerable类型,那么我们可以做这样的事情:

var realEstateAgentlicenseNumber = realEstateAgent.LicenseNumbers
.Where(x => x.State == listing.Listing.State)
.Select(x => x.License)

如果找不到匹配项,realEstateAgentlicenseNumber将为null或为空。在这种情况下,我们可以分配第一个值如下:

var realEstateAgentlicenseNumber = realEstateAgent.LicenseNumbers.First()

好的,下面是我们最终所做的,在我们的案例中工作

RealEstateAgentLicenseNumber =
listingResponse.RealEstateAgent.LicenseNumbers.FirstOrDefault(f => f.State == listingResponse.Listing.State)?.License ??
listingResponse.RealEstateAgent.LicenseNumbers.FirstOrDefault()?.License ??
string.Empty,

最新更新