C# 如何在泛型列表中获取T的类型
我正在使用一个编辑器来反映我的类,并将它们转换为UI字段,以便通过更改UI中字段的值并保存它们来创建对象文件 问题是,当我使用通用列表时,编辑器生成器会停止,因为它不知道列表中要反映的对象的类型,它会一直将对象视为C# 如何在泛型列表中获取T的类型,c#,generics,reflection,types,generic-list,C#,Generics,Reflection,Types,Generic List,我正在使用一个编辑器来反映我的类,并将它们转换为UI字段,以便通过更改UI中字段的值并保存它们来创建对象文件 问题是,当我使用通用列表时,编辑器生成器会停止,因为它不知道列表中要反映的对象的类型,它会一直将对象视为对象 我只需要知道列表或字典中对象的类型,以反映它 守则: class ListUIEditor<T> : BaseEditor where T : new() { void BuildEditor() { Button addbutton =
对象
我只需要知道列表或字典中对象的类型,以反映它
守则:
class ListUIEditor<T> : BaseEditor where T : new()
{
void BuildEditor()
{
Button addbutton = new Button("+");
addbutton.Clicked += add_Event;
for (int i = 0; i < ((List<T>)base.boundObject).Count; i++)
{
container = new Container();
ObjectUIEditor editor = new ObjectUIEditor("itemName",
((List<T>)base.boundObject)[i],
container);
editor.buildEditor();
itemsSubEditors.Add(i, editor);
}
}
protected void add_Event(object sender, EventArgs e)
{
T newObject = new T();
container = new Container();
ObjectUIEditor editor = new ObjectUIEditor("itemName", newObject, container);
editor.buildEditor();
itemsBox.ShowAll();
}
}
class ListUIEditor:BaseEditor其中T:new()
{
void BuildEditor()
{
按钮addbutton=新按钮(“+”);
addbutton.Clicked+=添加_事件;
对于(int i=0;i<((List)base.boundObject).Count;i++)
{
容器=新容器();
ObjectUIEditor=new ObjectUIEditor(“itemName”,
((列表)base.boundObject)[i],
容器);
buildEditor();
添加(i,编辑器);
}
}
受保护的void add_事件(对象发送方、事件参数e)
{
T newObject=newt();
容器=新容器();
ObjectUIEditor=new ObjectUIEditor(“itemName”、newObject、container);
buildEditor();
itemsBox.ShowAll();
}
}
试试这个:
Type type = listObj.GetType().GetGenericArguments()[0];
可能与我看到的问题重复,但不同的是,我不是在同一个类中询问T的类型:“您的列表具有与容器类本身相同的类型参数。”该问题还返回了类型:object not my desired classTry该问题的第二个答案(此处由YD1m回答的问题)。如果您仍然有问题,请发布实际代码。请添加您正在使用的代码,您的问题不清楚。我尝试了两种方法,但均无效:1:t listObj=new t()Type Type=listObj.GetType().GetGenericArguments()[0];这导致异常2:Type[]Type=boundObject.GetType().GetGenericArguments();此函数返回一个包含以下元素的数组:object@user2302005-如果您使用的泛型方法的泛型参数与泛型列表类型匹配,则只需使用
type itemType=typeof(T);
@user2302005“2:type[]type=boundObject.GetType().GetGenericArguments();此操作返回一个数组,其中一个元素为:object“--您正在处理<代码>列表<代码>?如果是这样,如果您只有该类型的信息,您无法确定它可以包含哪些类型的对象,您需要查看各个对象。@user2302005<代码>列表<代码>withT=object
是<代码>列表…如果您的目标是拥有<代码>T其他类型,您需要使T
成为其他类型,但您还没有显示任何相关代码来说明T
是什么。@user2302005:告诉我们所有对象共享什么,它们有什么相似性。也许我们可以建议创建一个接口或公共基类。您对所有对象使用相同集合一定是有原因的。