0

根据传入的字符串从基类的列表列表中返回列表的最佳方法是什么。我有:

public List<myBaseData> FindFromListofLists(string aClass, List<List<myBaseData>> data)
{
    foreach (var item in data)
    {
        foreach(myBaseData baseData in item)
        {
            if (baseData.ToString().CompareTo(aClass) == 0) //not sure if this is the best way as if the class overides the toString method...
            return item;
        }
    }
    return null;


}

我确信有更好的方法来做到这一点。任何帮助,将不胜感激。

4

5 回答 5

1

尝试 -

public List<myBaseData> FindFromListofLists(
      string aClass, List<List<myBaseData>> data)
{

  return data.Find(
      item => item
              .Where(d => d.ToString().CompareTo(aClass) == 0)
              .Count() > 0);

}

您也可以尝试将其写为 -

return data.Find(item => item.Select(x => x.ToString()).Contains(aClass));

请注意,代码未经测试:P

于 2011-03-09T15:51:25.483 回答
0

我想你想要达到的就是这个。

public class MyBaseClass{}
public class MyChildClass : MyBaseClass{}

然后在其他地方您只想返回 MyChildClass 对象。这是你需要做的:

public IEnumerable<MyBaseClass> GetFilteredObjects(Type type, List<List<MyBaseClass>> lists)
{
  foreach(var list in lists)
  {
    foreach(var item in list)
    {
      if(item.GetType() == type)
        yield return item;
    }
  }
}

然后你像这样调用这个方法:

var myChildClasses = GetFilteredObjects(typeof(MyChildClass), listOfLists);

希望这是您正在寻找的。

于 2011-03-09T15:51:34.610 回答
0

我会使用 aDictionary<string, List<myBaseData>>Dictionary<Type, List<myBaseData>>instedList<List<myBaseData>>

Dictionary-sTryGet方法正是您所需要的FindFromListofLists

于 2011-03-09T15:35:41.337 回答
0

您可以使用:

            if (((List<myBaseData>)item).Contains(aClass)) ;
            {
                return (item);
            }

而不是你的第二个“foreach”。这就是动态列表的伟大之处。

于 2011-03-09T15:22:36.447 回答
0

这是你需要的吗?

如何在 C# 中合并 List<List<String>>

然后您可以使用该.Where()方法将结果缩小到匹配的范围内aClass

于 2011-03-09T15:12:28.527 回答