在ItemsSource中获取List内对象的类型

时间:2015-07-30 14:43:52

标签: c# wpf generics reflection

我有一个给出List的DataGrid,它可以是Foo,Bar或Baz类型。稍后,我需要提取该数据以保存它,为此我需要知道List中设置为ItemsSource的对象的类型。我尝试使用var car = database.find(carId); car.then(function (data) { console.log(data); }); ,没有工作,尝试public void DownloadExcelFile() { //code string fileName = @"D:\NewFolder\Test.xlsx"; oWB.SaveAs(fileName, XlFileFormat.xlOpenXMLWorkbook, missing, missing, missing, missing, XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing); oWB.Close(missing, missing, missing); oXL.UserControl = true; oXL.Quit(); } 例如产生以下警告:

GetType

我无法找到关于此错误的任何内容。也搜索过,无法找到任何东西。有没有办法做我想做的事情?或者甚至比直接获取类型更好的方法呢?

修改

忽略所有锅炉板代码(使用等..)

假设我们已经创建了一个DataGrid,以便稍后将其添加到窗口

if(GridType is List<Foo>)

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用typeof:

if(GridType == typeof(List<Foo>))

答案 1 :(得分:1)

您混合了两件事 - is来检查对象是否属于给定类型,GetType()返回Type引用。 DataGridType的类型为TypeType对象永远不是List<Foo>的实例。 (想象一下将DataGridType投射到List<Foo> - 这意味着什么?)

你想要:

if (DataGridType == typeof(List<Foo>))

...将检查该类型是否完全 List<Foo>或:

if (DataGridType.ItemsSource is List<Foo>)

...将检查该类型是否可分配给 List<Foo>

或者,如果你要在if身体中投射:

List<Foo> listFoo = DataGridType.ItemsSource as List<Foo>;
if (listFoo != null)
{
    // Use listFoo
}
相关问题