Каков наилучший способ вернуть список из списка списков базового класса на основе строки, переданной в

Каков наилучший способ вернуть список из списка списков базового класса на основе переданной строки. Я получил:

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;


}

Я уверен, что есть лучший способ сделать это. Любая помощь будет оценена.

5 ответов

Пытаться -

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

Это то, что тебе надо?

Как объединить список> в C#

И тогда вы можете использовать .Where() способ сузить результаты до соответствия aClass,

Ты можешь использовать:

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

вместо вашего второго "foreach". и это отличная вещь о динамических списках.

Я бы использовал Dictionary<string, List<myBaseData>> или же Dictionary<Type, List<myBaseData>> поставленный List<List<myBaseData>>

Словарь-ы TryGet метод делает именно то, что вам нужно в FindFromListofLists

Я думаю, что вы пытаетесь достичь этого.

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);

Надеюсь, это то, что вы ищете.

Другие вопросы по тегам