I have a DataGrid that is given a List, which can be either of type Foo, Bar, or Baz. Later on, I need to extract that data to save it, and to do so I need to know the type of the object inside the List that was set as ItemsSource. I have tried to use GetType, didn't work, trying to do if(GridType is List<Foo>) for example produces the following warning:
The given expression is never of the provided ('System.Collections.Generic.List<Foo>') type
And I couldn't find anything on this error. Searched SO too, couldn't find anything. Is there a way to do what I am trying to do? Or even, a better way than simply getting the type directly?
EDIT:
Ignoring all the boiler plate code (using etc..)
Assume we have created a DataGrid to later add it to the window
public class Foo
{
public int SomeVar { get; set; }
}
public class MainWindow : Window
{
public MainWindow ()
{
List<Foo> Foos = new List<Foo> ();
Foos.Add (new Foo ());
Foos.Add (new Foo ());
DataGrid SomeDataGrid = new DataGrid ();
SomeDataGrid.ItemsSource = Foos;
Type DataGridType = SomeDataGrid.ItemsSource.GetType ();
if (DataGridType is List<Foo>) //< Error
{
// do stuff
}
}
}

You're mixing two things - is to check whether an object is of the given type, and GetType() which returns the Type reference. The type of DataGridType is Type, and a Type object is never an instance of List<Foo>. (Imagine casting DataGridType to List<Foo> - what would that mean?)
You want either:
if (DataGridType == typeof(List<Foo>))
... which will check whether the type is exactly List<Foo> or:
if (DataGridType.ItemsSource is List<Foo>)
... which will check whether the type is assignable to List<Foo>.
Alternatively, if you would be casting in the if body:
List<Foo> listFoo = DataGridType.ItemsSource as List<Foo>;
if (listFoo != null)
{
// Use listFoo
}
See more on this question at Stackoverflow