【问题标题】:Select a property parameter (Function) from a Generic Item从通用项中选择一个属性参数(函数)
【发布时间】:2021-05-18 22:16:14
【问题描述】:

我有一个组件,其中接受一个泛型类型和一个Func<TItem, string> 来选择一个属性以及一个称为数据的所述类型的列表。要从列表中选择属性非常简单:Data.Select(Property) 我会得到一个所述属性的列表。但是,我现在要做的不是选择列表,而是从数据(如果有的话)中选择单个项目TSelected,其中属性等于我称为tvalue 的某个值。

[Parameter]
public List<TItem> Data { get; set; }

[Parameter]
public Func<TItem, string> Property { get; set; }

[Parameter]
public TItem Selected { get; set; }

...

private string _value;

[Parameter]
public string Value
{
    get => _value;
    set
    {
        // if it is equals do nothing
        if (string.Equals(_value, value) || value == null)
            return;

        _value = value;

        var selected = Data.Select(Property).FirstOrDefault(x => string.Equals(value, x));

        if (!string.IsNullOrEmpty(selected))
        {
            /* Don't know how to select the property from a single TItem */
            Selected = Data.Where( x => x.??? == selected).FirstOrDefault();
        }
    }
}

【问题讨论】:

  • 通常 T 前缀表示类型参数。当您将变量命名为 TSelectedTValue 时,会非常混乱。
  • 我会解决的

标签: c# linq generics lambda


【解决方案1】:

您的 Property 函数接受 TItem 并返回您想要的属性,对吧?因此,只需在 where 子句中使用它即可。

Selected = Data.Where( x => Property(x) == selected).FirstOrDefault();

【讨论】:

  • awesome 完美运行。冷却结束后将接受答案。还有 7 分钟。
猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2017-03-24
  • 2020-11-08
  • 1970-01-01
  • 2017-12-16
相关资源
最近更新 更多