基于传入的字符串从基类的列表列表返回列表的最佳方法是什么

发布于 2024-10-20 22:41:16 字数 508 浏览 5 评论 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;


}

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

what's the best way to return a List from a list of Lists of a base class based on string passed in. I've got:

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;


}

I'm sure there's a better way to do this. Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

素食主义者 2024-10-27 22:41:16

尝试 -

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

Try -

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

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

}

You can also try to write it as -

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

Please note that the code is untested :P

十年九夏 2024-10-27 22:41:16

这是你需要的吗?

如何合并列表>>在 C#

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

Is this what you need?

How to Union List<List<String>> in C#

And then you can use the .Where() method to narrow down the results to those matching aClass.

回眸一遍 2024-10-27 22:41:16

您可以使用:

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

代替第二个“foreach”。
这就是动态列表的伟大之处。

you can use:

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

instead of your second "foreach".
and that's the great thing about dynamic lists.

一曲爱恨情仇 2024-10-27 22:41:16

我会使用 Dictionary>Dictionary> 代替 List 。 >

Dictionary-s TryGet 方法正是您在 FindFromListofLists 中所需要的

I would use a Dictionary<string, List<myBaseData>> or Dictionary<Type, List<myBaseData>> insted of List<List<myBaseData>>

The Dictionary-s TryGet method does exactly what you need in FindFromListofLists

谢绝鈎搭 2024-10-27 22:41:16

我认为你想要实现的目标就是这个。

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

希望这就是你正在寻找的。

I think what you are trying to achieve is this.

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

then somewhere else you want to return only the MyChildClass objects.
this is what you need to do:

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

then you call this method like this:

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

Hope this is what you are looking for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文