C# Covert Type into IEnumerable of same Type?

后端 未结 1 1602
说谎
说谎 2021-01-21 18:15

I have some methods that execute arbitrary SQL against a database and serialize that data collection into a list of a concrete type. That data is then serialized into JSON and s

相关标签:
1条回答
  • 2021-01-21 18:21

    This is mostly a duplicate of How to use Activator to create an instance of a generic Type and casting it back to that type?, however it's hard to tell.

    Basically, if you have a type object Type theType, you need to do something like:

     var listType = typeof(List<>);
     var typeParams = new [] {theType};
     var listOfTType = listType.MakeGenericType(typeParams);
     var newListOfT = Activator.CreateInstance(listOfTType);
    

    At that point, you have a variable of type object, but that references an object of type List<WhateverYourTypeIs>. Say, theType is typeof(int), then you will have an object of List<int>. Casting it to something usuable is a whole other question though. If you want to add something to that list, I suspect the best way would be to get a MethodInfo for the Add method and Invoke it.

    I thought of another way to do this if the type has a default constructor and isn't too expensive to create. Here's a sample (creating a List<int> - but that's just the way I have it coded):

      var type = typeof(int);
      var dummy = Activator.CreateInstance(type);
      var listOfType = new[] {dummy}.ToList();
    

    When you are finished, the listOfType variable is typed as a List<object> but refers to a List<int>. It's mostly mostly workable - for example, you can call Add(object someObj) on it. You won't get compile type parameter type checking, but you will be able to use it.

    0 讨论(0)
提交回复
热议问题