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

これはあなたが必要なものですか?

C#でリスト<リスト<文字列>>を結合する方法

次に、この.Where()メソッドを使用して、結果を一致するものに絞り込むことができますaClass

于 2011-03-09T15:12:28.527 に答える
0

Dictionary<string, List<myBaseData>>またはDictionary<Type, List<myBaseData>>の代わりに使用しますList<List<myBaseData>>

Dictionary-sTryGetメソッドは、必要なことを正確に実行しますFindFromListofLists

于 2011-03-09T15:35:41.337 に答える
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

あなたが使用することができます:

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

2番目の「foreach」の代わりに。これが動的リストの優れた点です。

于 2011-03-09T15:22:36.447 に答える