是否可以检查列表是否包含给定(但是动态)类型的对象,该对象来自相同的基本摘要类?当类型是动态的时候检查两个变量是否相同,并且这两个变量都是相同基类别的派生类型
主要问题不在于列表,而在于比较类型本身。 在单变量和静态变量,它很容易:
if(someVariable is int)
检查与静态类型列表中也很容易,如:
SomeList.OfType<int>().Any()
或
(from _Object in SomeList.OfType<int> where _Object is int select _Object).Count() == 0
但我cant't处理它,如果我想检查的类型是动态的,fe作为方法参数传递:
abstract class BasicClass;
class DerivativeOne : BasicClass { }
class DerivativeTwo : BasicClass { }
// in main:
List<BasicClass> _List = new List<BasicClass>();
DerivativeOne a = new DerivativeOne();
DerivativeTwo b = new DerivativeTwo();
DerivativeOne c = new DerivativeOne();
if(!CheckIfTypeExistsInList(a, _List)
{
_List.Add(a);
}
if(!CheckIfTypeExistsInList(b, _List)
{
_List.Add(b);
}
if(!CheckIfTypeExistsInList(c, _List)
{
_List.Add(c); // this is what I don't want to happen,
// because I already have one object of type DerivativeOne in my list.
}
// the function:
bool CheckIfTypeExistsInList(BasicClass pObject, List<BasicClass> pList)
{
/// few attempts:
pList.OfType<(pObject.GetType()>().Any(); // attempt one, error
return (from _Object in SomeList.OfType<(pObject.GetType())> where _Object is int select _Object).Count() == 0; // attempt two, error
}
PS。我意识到代码看起来并不整齐,但我试图只显示问题本身,忽略了额外的逻辑和内容。
PS2。我知道解决这个问题的方法就是给BasicClass添加一些属性,并让每个派生类都具有唯一的属性值,但仍然 - 我不想寻找另一条路径来解决问题,我只是如果有可能以“这个”的方式来做这件事,那么就很有兴趣
泛型是编译时的事情,你不能把一个运行值在<>我肯定你发现了。 – SteveM