I see no reason why it should fail, unless FetchData is improper data.
Possibility I: FetchData is returning null, and hence the type parameter cannot be figured out (null has no type in C#).
Possibility II: FetchData is not returning a proper List<T> object.
I would redesign the thing like:
private static void GetData()
{
dynamic dynamicList = FetchData();
if (dynamicList is IEnumerable) //handles null as well
FilterAndSortDataList(Enumerable.ToList(dynamicList));
//throw; //better meaning here.
}
It checks whether the returned type is IEnumerable (hoping that it is some IEnumerable<T> - we cant check if it is IEnumerable<T> itself since we dont have T with us. Its a decent assumption) in which case we convert the obtained sequence to List<T>, just to be sure we are passing a List<T>. dynamic wont work with extension methods, so we have to call Enumerable.ToList unfortunately. In case dynamicList is null or not an enumerable it throws which gives it better meaning than some run time binding error.