C# 如何使用泛型方法构建相同类型的列表?

C# 如何使用泛型方法构建相同类型的列表?,c#,generics,C#,Generics,鉴于: public static void GetAllTypesInContainer(包含子对象bw的容器) { var list=新列表(); var stuff=bw.GetChildren(); foreach(stuff中的变量child) { if(child.GetType().Name==typeOf(t.Name) { 列表。添加((t)子项); } } } 如何将该类型的值添加到列表中?如果我理解代码,则您试图将t类型的所有子项都添加到列表中,而忽略其余的子项。林克让这

鉴于:

public static void GetAllTypesInContainer(包含子对象bw的容器)
{
var list=新列表();
var stuff=bw.GetChildren();
foreach(stuff中的变量child)
{
if(child.GetType().Name==typeOf(t.Name)
{
列表。添加((t)子项);
}
}
}

如何将该类型的值添加到列表中?

如果我理解代码,则您试图将t类型的所有子项都添加到列表中,而忽略其余的子项。林克让这很容易。根据您的示例,我假设调用
bw.GetChildren()
的结果是可枚举的

public static void GetAllTypesInContainer<t>(AContainerWithChildren bw)
{
    var list = new List<t>();       
    var stuff = bw.GetChildren();

    foreach (var child in stuff)
    {
        if (child.GetType().Name == typeOf(t).Name)
        {
            list.Add((t)child);
        }
    }
}
使用System.Linq;
// ...   
私有静态列表GetAllTypesInContainer(此容器bw)
{
var list=bw.GetChildren().OfType().ToList();
退货清单;
}
或者对于优化后适合流畅编码风格的版本,OP所追求的是,保持容器的上下文:

using System.Linq;
// ...   

private static List<T> GetAllTypesInContainer<T>(this Container bw)
{
    var list = bw.GetChildren().OfType<T>().ToList();
    return list;
}
私有静态容器ForEachChildOfType(此容器bw,Action)
{
var children=bw.GetChildren().OfType().ToList();
儿童。做(行动);
返回bw;
}
//稍后将根据OP的示例使用类似的方法
体重
.StoreInformation()
.ForEachChildOfType(链接=>
{
如果(link.Href==“Something”)//注意,注意混合情况!!!
{
}
})
.AssertControlTitleOnHomePage();
注意:作为一种通用的编码风格,我从来不会调用GetXXX方法,除非它实际返回了一些东西,因此名称发生了变化


另外,希望里面没有打字错误,这都是出于记忆

如果我理解代码,那么您正试图将t类型的所有子项都放入一个列表中,而忽略其余的子项。林克让这很容易。根据您的示例,我假设调用
bw.GetChildren()
的结果是可枚举的

public static void GetAllTypesInContainer<t>(AContainerWithChildren bw)
{
    var list = new List<t>();       
    var stuff = bw.GetChildren();

    foreach (var child in stuff)
    {
        if (child.GetType().Name == typeOf(t).Name)
        {
            list.Add((t)child);
        }
    }
}
使用System.Linq;
// ...   
私有静态列表GetAllTypesInContainer(此容器bw)
{
var list=bw.GetChildren().OfType().ToList();
退货清单;
}
或者对于优化后适合流畅编码风格的版本,OP所追求的是,保持容器的上下文:

using System.Linq;
// ...   

private static List<T> GetAllTypesInContainer<T>(this Container bw)
{
    var list = bw.GetChildren().OfType<T>().ToList();
    return list;
}
私有静态容器ForEachChildOfType(此容器bw,Action)
{
var children=bw.GetChildren().OfType().ToList();
儿童。做(行动);
返回bw;
}
//稍后将根据OP的示例使用类似的方法
体重
.StoreInformation()
.ForEachChildOfType(链接=>
{
如果(link.Href==“Something”)//注意,注意混合情况!!!
{
}
})
.AssertControlTitleOnHomePage();
注意:作为一种通用的编码风格,我从来不会调用GetXXX方法,除非它实际返回了一些东西,因此名称发生了变化


另外,希望里面没有打字错误,这都是出于记忆

最终的解决方案是:

private static Container ForEachChildOfType<T>(this Container bw, Action<T> action)
{
    var children = bw.GetChildren().OfType<T>().ToList();

    children.Do(action);

    return bw;
}

// later to be used similar as follows as per OP's example

bw
  .StoreInformation()
  .ForEachChildOfType<HtmlHyperLink>(link =>
  {
      if (link.Href == "Something") // caution, watch for mixed case!!!
      {
      }
  })
  .AssertControlTitleOnHomePage();

回调允许我使用匿名方法处理结果。

最终解决方案是:

private static Container ForEachChildOfType<T>(this Container bw, Action<T> action)
{
    var children = bw.GetChildren().OfType<T>().ToList();

    children.Do(action);

    return bw;
}

// later to be used similar as follows as per OP's example

bw
  .StoreInformation()
  .ForEachChildOfType<HtmlHyperLink>(link =>
  {
      if (link.Href == "Something") // caution, watch for mixed case!!!
      {
      }
  })
  .AssertControlTitleOnHomePage();

回调允许我使用匿名方法处理结果。

你知道这个方法实际上什么都不做,对吗?它创建一个列表并将其丢弃。
Type
应该是
Type
还是某个类型的实例?Yes方法没有任何作用,因为我还没有决定如何返回列表。我可以迭代变量,如上所示。我不能做的是向列表中添加任何内容,如上所示。类型不是某事物的实例,而是某事物的类型。我的方法是告诉所有人在列表中返回什么类型的孩子…@JohnPeters请不要更新你的问题来显示答案。这打破了你问题的逻辑。我回滚了我们的编辑。你知道这个方法实际上没有任何作用,对吗?它创建一个列表并将其丢弃。
Type
应该是
Type
还是某个类型的实例?Yes方法没有任何作用,因为我还没有决定如何返回列表。我可以迭代变量,如上所示。我不能做的是向列表中添加任何内容,如上所示。类型不是某事物的实例,而是某事物的类型。我的方法是告诉所有人在列表中返回什么类型的孩子…@JohnPeters请不要更新你的问题来显示答案。这打破了你问题的逻辑。我回滚了我们的编辑。谢谢您的回复。这正是我想要的。谢谢威尔的回复。这正是我要找的。