Почему следующая программа возвращает правильное значение (высокого уровня) типа только в 3-м случае и как еще можно вернуть тип объекта в List
using System;
using System.Collections.Generic;
using System.Reflection;
public class Program
{
public static void Main()
{
List<dynamic> idChecksList = new List<dynamic>();
List<ClientViewModelNew> mappedClientsNew = new List<ClientViewModelNew>();
List<ClientViewModelOld> mappedClientsOld = new List<ClientViewModelOld>();
var obj1 = new ClientViewModelNew();
var obj2 = new ClientViewModelOld();
// Console.WriteLine(obj1.EXa);
mappedClientsNew.Add(obj1);
mappedClientsOld.Add(obj2);
bool useNewClientObject = true;
if (useNewClientObject == true)
{
foreach (ClientViewModelNew item in mappedClientsNew)
{
idChecksList.Add(item);
}
}
else
{
foreach (ClientViewModelOld item in mappedClientsOld)
{
idChecksList.Add(item);
}
}
String typeArg0 = idChecksList.GetType().GetGenericArguments()[0].ToString(); // GenericTypeArguments[0].ToString();
String typeItem1 = idChecksList.GetInternalType().ToString();
String typeItem2 = idChecksList[0].GetType().ToString();
Console.WriteLine("internal type of List, Method 1:" + typeArg0);
Console.WriteLine("internal type of List, Method 2:" + typeItem1);
Console.WriteLine("internal type of List, Method 3:" + typeItem2);
}
}
public static class GenericListExtensions
{
public static Type GetInternalType<T>(this List<T> list)
{
return typeof(T);
}
}
public class ClientViewModelNew
{
public String EXa { get; set; } = "Initial Name for New Class";
}
public class ClientViewModelOld
{
public String EXa { get; set; } = "Initial Name for Old Class";
}
возвращает
internal type of List, Method 1:System.Object
internal type of List, Method 2:System.Object
internal type of List, Method 3:ClientViewModelNew
Почему первые два возвращают System.Object и как это можно исправить?