Getting the type of the object inside List inside ItemsSource

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
    }
  }
}
Jon Skeet
people
quotationmark

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
}

people

See more on this question at Stackoverflow