Звучит так, как будто это работает так же хорошо, как возможно.
Поскольку вы используете dynamic
, наибольший общий знаменатель элементов списка -object
. Просто потому, что у вас есть только один элемент, это не означает, что время выполнения может гарантировать это.
Таким образом, вам, вероятно, понадобится специальный случай, который вы ищете.
Type ret;
if (list1.Count == 0)
ret = typeof(object);
else
ret = list1[0].GetType();
Конечно, эта проверка является излишней, если код, который вы нам предоставили, должен восприниматься буквально. Но я надеюсь, что вы это поняли.
Вы также можете добавить проверку, чтобы просмотреть список и найти, если все элементы одного типа, если это необходимо.
В общем, похоже, что это не может быть отличным временем для использования dynamic
. Если вам нужны анонимные типы, я бы предложил вам перейти к конкретным для этого. Если вы делаете то, что вы здесь делаете, просто введите его как List<Test>
.
Конечно, если все, что вы ищете, по сути является клоном этого списка, вы можете это сделать и иметь это право. Я сделал это как foreach
для удобства чтения, но LINQ был бы неплохим вариантом здесь.
List<object> ret = new List<object>();
foreach (var v in list1)
{
var type = v.GetType();
ret.Add(/* new instance of type */);
}
return ret;
Помните, конечно, что это не гарантирует вам ничего больше о типах содержится, и вы будете иметь довольно хорошо тот же вопрос еще раз, когда вы пытаетесь на самом деле читать результирующий список.
Я бы действительно предложил переоценить использование вами динамичного здесь. Это позволяет некоторым вещам, которые в противном случае были бы невозможны, поэтому вы можете придерживаться его, но это стоит второй мысли.