我有一个示例实体学生,如下所示。
public class Student
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
private int _credits;
public int Credits
{
get
{
return _credits;
}
set
{
_credits = value;
}
}
}
我有另一个类,它是System.Collections.ObjectModel.Collection的后代,如下所示。
public class StudentCollection : System.Collections.ObjectModel.Collection<Student>
{
//SomeCollection level validations.
}
现在我正在创建像StudentCollection c1 = new StudentCollection();
这样的学生集合。问题是如果我有一个学生对象是c1集合的成员那么是否有可能获得对象所属的完整集合使用反射?如果不可能使用反射,那么还有其他方法可以通过以上方式实现。
我认为你的意思是,给定一个实例(例如Student student
),我可以得到实例所属的集合。
如果是这样,答案是否定的,不仅仅是使用学生。
如果您有多个集合(例如List<StudentCollection> studentCollections
),那么您可以搜索所有集合以查找包含该实例的列表。
var collection = studentCollections.Where(collection => collection.Contains(student)).SingleOrDefault();
然后,集合将是包含学生的集合,如果没有匹配则为null。如果集合变大,性能可能会非常糟糕。在这种情况下,您可能希望查看某种索引,可能使用Dictionary。
是的,但可能不是你想要的。
如果您有“item”,则可以遍历范围内的所有对象,如果该对象是集合,请使用Collection.Contains(item)
检查集合是否包含该项目。请注意,可能有多个集合持有相同的项目。
这将是一个非常昂贵的操作,并且实现起来相当复杂,因此很可能不适合您的目的,除非您正在制作某种调试工具或类似工具。
如果您拥有有限数量的“候选”集合,则可以通过调用Collection.Contains(item)
来检查它们中是否包含该项目。