C# 3.0 has a “nice” Feature called “Anonymous Types”.
Basically it is great for LINQ where you want to create a Type on the fly.
To create such a Type just use
var myAnonymousObject = new {
    Firstname = "John",
    Lastname = "Doe"
};
Now you possibly want to extend that a little and have a Function return a List of such a Type.
You can’t use List<T> because you don’t know the Type. You could use a List<object> but that’s not nice. It’s better to use a Feature called “Casting by Example”. 
An Example Function implementing this Feature could look like:
public List<T> GetList<T>(T exampleObject)
{
    List<T> newList = new List<T>();
    // TODO: Fill the List somehow
    return newList;
}
You can then call this Function like this:
var someList = GetList(
    new {
        Firstname = "",
        Lastname = ""
    }
);