C# 将Object类转化为List<T>类,其中T的类型不是object类型。

C# 将Object类转化为List<T>类,其中T的类型不是object类型。 例如:定义:list<ValueTable> list = new list<ValueTable>();
obtect obj;
怎么样将obj的值赋给list.

第1个回答  2012-02-10
你要先理解泛型集合,泛型的意思就是规范、统一,你要转不同类型的话用arraylist吧
如果非要用List<T>那就用is做判断,用as转换类型
第2个回答  2012-02-10
ghotos 说的很对,你既然用泛型了,就代表你知道这个类型了,如果你不知道类型,就用List就可以了。
装箱拆箱是指值类型和引用类型之间的转换,这点ghotos 说的不是很正确。
第3个回答  推荐于2018-03-02
protected void Page_Load(object sender, EventArgs e)
{
List<ValueTable> list = new List<ValueTable>();
object obj = new ValueTable(1);
ValueTable val = obj as ValueTable;
if (val != null)
{
list.Add(val);
}
}
class ValueTable
{
private int id;
public ValueTable(int id)
{
this.id = id;
}
}追问

object obj = new ValueTable(1);
具体的含义可以解释一下嘛。谢谢!

追答

你定义了1个List,里面用来装ValueTable类型的对象,你现在有的是obj对象,
那么你在装obj前,你必须确认obj的真实类型必须是ValueTable或者ValueTable的派生类
object obj = new ValueTable(1);
//这表明了obj其实是1个ValueTable类的实例,这样obj转化成ValueTable 时,val才不为null

追问

非常感谢!还有些疑问。list.count不为1,是不是得object obj = new ValueTable(list.count);

追答

new ValueTable(1);
这里的1是,ValueTable实例化的过程中,类中的构造函数
public ValueTable(int id)
{
this.id = id;
}
,把类下面的字段id设为1,你可以设为0,10,1000,只要是int类型就OK,
与list.count没有关系.
实例完成后,再隐式转化成Object类型,
与Object obj =(object ) new ValueTable(1);强转一样的效果.

本回答被提问者和网友采纳
第4个回答  2012-02-10
你想要干嘛?既然是泛型List,里面只好放这个类型,你add进去的时候,系统会自动尝试转换来着追问

这个我知道,但是我想转化为不同的类型,做一个通用的方法。

追答

那就别用泛型的List了吧,用那种自己手动装箱拆箱的集合。

追问

装箱拆箱我不明白啊,能不能举个实例啊!非常感谢!

追答

呃~或许你可以尝试定义object的list
List objList = new List();
objList.Add(new Class1());
objList.Add(new Calss2());
取的时候
if(objList[0] is Class1)
{
var _class1 = (Class1)objList[0];
}
以上代码木有验证

第5个回答  2012-02-10
ValueTable vt = (ValueTable )obj;
list.add(vt );
这样做可行 但是不好
相似回答