【问题标题】:C# Setting Variable to outcome of if statementC# 将变量设置为 if 语句的结果
【发布时间】:2020-04-28 21:04:06
【问题描述】:

我正在尝试编写一个 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.

【问题讨论】:

  • 你也需要指定类型,就像它说的那样。类型在此表单&lt;T&gt; 之间指定。所以如果LicenseNumbers是int[],你要写Array.ForEach&lt;int&gt;

标签: c# arrays entity-framework


【解决方案1】:

该错误仅表示编译器无法推断您正在调用的ForEach 方法的T 的类型。

试试Array.ForEach&lt;NameOfTheTypeOfTheItem&gt;(...)

类型可以是您在realEstateAgent.LicenseNumbers 中的项目类型。

【讨论】:

    【解决方案2】:

    此行中的licenseNumber 拼写错误:

    Array.ForEach(realEstateAgent.LicenseNumbers, licensNumber  =>
    

    【讨论】:

      【解决方案3】:
      realEstateAgent.LicenseNumbers
      

      这应该是一个数组确保它是一个数组,如果它是一个列表尝试调用 .ToArray()

      realEstateAgent.LicenseNumbers.ToArray()

      【讨论】:

      • 我明白了,我会记住的,下次遇到这个,谢谢你的帮助!
      【解决方案4】:

      我正在尝试查看是否可以简化此代码。我不确定以下是否可行,但值得一试!

      如果 realEstateAgent.LisenceNumber 是 IEnumerable 类型,那么我们可以这样做:

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

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

      var realEstateAgentlicenseNumber = realEstateAgent.LicenseNumbers.First()
      

      【讨论】:

      • 感谢您的评论,我们最终做了类似的事情,我肯定让它比我的第一种方法更复杂
      • 太棒了!很高兴你有一个解决方案:)
      【解决方案5】:

      好的,这就是我们最终要做的,在我们的案例中工作

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-29
        • 2021-09-14
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 2016-08-17
        相关资源
        最近更新 更多