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