【问题标题】:How to pass anonymous property via lambda to a generic function?如何通过 lambda 将匿名属性传递给泛型函数?
【发布时间】:2011-04-02 11:23:51
【问题描述】:

我想使用 lambda 将匿名属性传递给泛型函数并在那里访问它。
以及如何访问里面的属性。

using (CommentsRepository commentsRepository = new CommentsRepository())
{
   var comments = commentsRepository.GetAllComments();

   Foo<Comment>(comments, 0,com=>com.ID); //Comment is an  EF entity
}

public static void Foo<TObject>(IEnumerable<TObject> list, int iCurID, <Func<TObject, TProperty> property) where TObject : class
{       
   foreach (var cat in list.Where(/*How to access the property*/==iCurID)
   {
          int x = cat.property;
   }
 }

【问题讨论】:

    标签: c# entity-framework generics lambda


    【解决方案1】:

    您只需调用委托:

    public static void Foo<TObject>
        (IEnumerable<TObject> list, 
         int iCurID,
         Func<TObject, int> propertySelector) where TObject : class
    {       
       foreach (var cat in list.Where(x => propertySelector(x) == iCurID))
       {
    
       }
    }
    

    请注意,我必须将委托的类型更改为 Func&lt;TObject, int&gt;,否则您无法将其与 iCurID 进行比较。

    【讨论】:

    • 什么是propertySelector?你的意思是财产(x)?
    • @urker:对不起,我的意思是更改参数的名称 - 我个人也会更改“iCurID”,这也毫无意义。
    • @urker:不清楚您所说的“我如何访问里面的属性”是什么意思。你想做什么?里面在哪里?
    • @Jon Skeet,内循环!获取属性值:int x = cat.property;
    • @urker:您已经知道属性的值 - iCurID - 否则它不会通过 Where 子句开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多