c# - 匿名委托(delegate) - 使用对象集合搜索属性

标签 c# anonymous-methods

以下是我的应用程序中使用匿名委托(delegate)搜索属性集合的当前代码:

public class MyObject
{
    public MyObject() { }

    public string MyObjectId { get; set; }
    public List<MySubObject> SubObjects { get; set; }
}

public class MySubObject
{
    public MySubObject() { }

    public string MySubObjectId { get; set; }
}

public List<MyObject> Search(string input)
{
    List<MyObject> AllObjects = Data.GetAllObjects();
    List<MyObject> SearchResults = new List<MyObject>();

    SearchResults = AllObjects.FindAll
    (
        delegate(MyObject o)
        {
            return e.MyObjectId.Equals(input)
        }
    );

    if (SearchResults .Count.Equals(0))
            SearchResults = null;

        return SearchResults ;
}

我想修改匿名委托(delegate)以通过通用列表中的 MySubObject.MySubObjectId 属性而不是 MyObjectId 属性进行搜索。我如何修改匿名委托(delegate)中的代码来完成此任务?

最佳答案

尝试以下操作

delegate(MyObject o) {
  var mySubObject = o as MySubObject;
  return mySubObject != null && mySubObject.MySubObjectId == input;
}

请注意,您还可以在此处使用更短的 lambda 语法

(o) => {
  var mySubObject = o as MySubObject;
  return mySubObject != null && mySubObject.MySubObjectId == input;
}

或者 LINQ 查询

var searchResult = AllObjects
  .OfType<MySubObject>()
  .Where(x => x.MySubObjectId == input)
  .Cast<MyObject>()
  .ToList()

关于c# - 匿名委托(delegate) - 使用对象集合搜索属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15797481/

相关文章:

c# - 嵌套随机生成器不是随机的

c# - Linq to sql插入附加的实体对象

c# - C# .NET 中任意长的 Parallel.For 循环

c# - 以编程方式检查 .NET 代码

c# - 如何显式定义匿名方法符合什么签名?

iphone - 是否可以在 Objective-C 中定义匿名选择器?

c# - 用 C# 中的 Reflection 或类似的(没有第 3 方库)替换 Property Getter/Setter

c# - 在构造函数中自动调用父类(super class)方法

c# - 带有 lambda 表达式和匿名方法的 ThreadPool.QueueUserWorkItem

foreach - 为什么我尝试在 List<string> 中修剪字符串似乎不起作用?