Каков наилучший способ вернуть список из списка списков базового класса на основе строки, переданной в
Каков наилучший способ вернуть список из списка списков базового класса на основе переданной строки. Я получил:
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
Это то, что тебе надо?
И тогда вы можете использовать .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);
Надеюсь, это то, что вы ищете.