C# 如何将自定义对象强制转换为列表<;对象>;
我有一个父类,具有一个包含子类列表的属性C# 如何将自定义对象强制转换为列表<;对象>;,c#,asp.net,.net,C#,Asp.net,.net,我有一个父类,具有一个包含子类列表的属性 //Parent Class : public class Family { private MemberList _familymember = new MemberList(); public MemberList FamilyMember { get { return _familymember ; } set { _familymember = value; } } } //
//Parent Class :
public class Family
{
private MemberList _familymember = new MemberList();
public MemberList FamilyMember
{
get { return _familymember ; }
set { _familymember = value; }
}
}
//Children Class :
public class Member
{
private string _name;
public string Name
{
get { return _name; }
set { _name= value; }
}
}
public class MemberList : List<Member>
{
}
//And here is how I use them :
Family myFamily = new Family();
Member dad = new Member();
Member mom = new Member();
//I add the children into the parent property :
myFamily.FamilyMember.Add(dad);
myFamily.FamilyMember.Add(mom);
//I have other different similar parent-children classes, eg : School-Classroom, Country-States and etc.
//In one condition, I need to write a generic class to process the List<custom> type property :
//some function that will return a children list object.
object ChildrenList = somefunction();
List<object> ObjectList = (List<object>)ChildrenList;
//and trying to get the Type name inside the List :
Type ChildrenType = ObjectList.GetType().GetGenericArguments()[0];
//It gives me error :
Unable to cast object of type 'MemberList' to type'System.Collections.Generic.List`1[System.Object]'
//or when I process other types of list
Unable to cast object of type 'ClassroomList' to type 'System.Collections.Generic.List`1[System.Object]'
Unable to cast object of type 'StateList' to type 'System.Collections.Generic.List`1[System.Object]'
现在剩下的代码可以正常工作了,我可以像往常一样循环使用IList
谢谢大家 您可以为所有儿童类(成员、教室和状态)添加公共接口,否则
List
和List
之间绝对没有连接,因为这将允许以下情况:
List<object> myList = (List<object>) memberTypeList;
myList.Add(5); // oops
List myList=(List)memberTypeList;
我的列表。添加(5);//哎呀
也是:虽然它是不幸的,但是C语言中没有类型的混叠,就像C或C++中的。尽管如此,从类派生看起来像是一种解决方法,但它在语义上是错误的,不应该使用。
您永远不应该继承列表,而应该声明一个:
public class Family
{
private List<Member> _familymember = List<Member>();
public List<Member> FamilyMember
{
get { return _familymember ; }
set { _familymember = value; }
}
}
这样称呼它:
var list=GetList(memberList).ToList()代码>
这至少可以解决您的编译器错误,但它不会解决此问题中的设计错误。永远不需要从列表继承。您可以在这里使用LINQ.ToList()代码>…为什么somefunction()返回对象?在MemberList中创建一个类似ToObject()的方法。在那里,使用Linq进行转换,比如“returnthis.{选择您想要包含的任何属性或simple ignore select}.ToList();”知道我应该如何编写接口类来链接列表和列表吗?当然,您可以改为链接List
。谢谢!我已将列表属性更改为使用私有列表,它可以工作!
List<object> myList = (List<object>) memberTypeList;
myList.Add(5); // oops
public class Family
{
private List<Member> _familymember = List<Member>();
public List<Member> FamilyMember
{
get { return _familymember ; }
set { _familymember = value; }
}
}
public static IEnumerable<T> GetList<T>(List<T> source)
{
return source;
}