C# 泛型子列表

C# 泛型子列表,c#,generics,c#-2.0,C#,Generics,C# 2.0,检查代码 class DynamicObj : BaseObj {} class BaseObj {} class clientCode { List<DynamicObj> GetFilteredObjs(List<BaseObj> baseList) { // I want to return the sublist of baseList which only have DynamicObj. List<Dyn

检查代码

class DynamicObj : BaseObj {}
class BaseObj {}

class clientCode 
{
   List<DynamicObj> GetFilteredObjs(List<BaseObj> baseList) 
   {
        // I want to return the sublist of baseList which only have DynamicObj.
        List<DynamicObj> dList = baseList.FindAll(
                                          delegate(BaseObj bo){        // Del1
                                          return bo is DynamicObj;
                                          }).ConvertAll<DynamicObj>(
                                             delegate(BaseObj bo){     // Del2 
                                             return bo as DynamicObj;
                                             });   

   }
}
classdynamicobj:BaseObj{}
类BaseObj{}
类clientCode
{
列表GetFilteredObjs(列表基本列表)
{
//我想返回只有DynamicObj的baseList的子列表。
List dList=baseList.FindAll(
代表(BaseObj bo){//Del1
返回bo是动态COBJ;
})ConvertAll先生(
代表(BaseObj bo){//Del2
返回bo作为cobj;
});   
}
}
现在这可能是一个愚蠢的问题,但我的代码必须循环对象2次,一次用于Del1循环,一次用于Del2循环


有直路吗?仅限C#2.0。

最简单的方法可能是使用迭代器块:

public IEnumerable<TTarget> FilteredCast<TSource,TTarget>
    (IEnumerable<TSource> source)
    where TSource : class
    where TTarget : class, TSource
{
    foreach (TSource element in source)
    {
        TTarget converted = element as TTarget;
        if (converted != null)
        {
            yield return converted;
        }
    }
}

请注意,这不会返回空值。如果希望包含空值,则需要明确满足此要求。

最简单的方法可能是使用迭代器块:

public IEnumerable<TTarget> FilteredCast<TSource,TTarget>
    (IEnumerable<TSource> source)
    where TSource : class
    where TTarget : class, TSource
{
    foreach (TSource element in source)
    {
        TTarget converted = element as TTarget;
        if (converted != null)
        {
            yield return converted;
        }
    }
}
请注意,这不会返回空值。如果希望包含空值,则需要明确地满足此要求。

当然:

IEnumerable<DynamicObj> GetDynamicObjects(IEnumerable<BaseObj> baseList)
{
    foreach(BaseObj baseObj in baseList)
        if(baseObj is DynamicObj)
            yield return (DynamicObj)baseObj;
}

List<DynamicObj> dynamicList = new List<DynamicObj>(GetDynamicObjects(...));
IEnumerable GetDynamicObjects(IEnumerable基本列表)
{
foreach(基本列表中的基本对象)
if(baseObj是动态cobj)
收益率回报率(DynamicObj)baseObj;
}
List dynamicList=新列表(GetDynamicObjects(…);
当然可以:

IEnumerable GetDynamicObjects(IEnumerable基本列表)
{
foreach(基本列表中的基本对象)
if(baseObj是动态cobj)
收益率回报率(DynamicObj)baseObj;
}
List dynamicList=新列表(GetDynamicObjects(…);