У меня была похожая, но гораздо более сложная проблема ... Я хотел определить, назначается ли тип членам типа коллекции или членам типа массива динамически.
Итак, вот лучший способ динамического получения типа элемента коллекции или массива с проверкой, если тип добавляемого объекта назначается коллекции или членам типа массива:
List<IComparable> main = new List<IComparable>() { "str", "řetězec" };
IComparable[] main0 = new IComparable[] { "str", "řetězec" };
IEnumerable collection = (IEnumerable)main;
//IEnumerable collection = (IEnumerable)main0;
string str = (string) main[0];
if (collection.GetType().IsArray)
{
if (collection.GetType().GetElementType().IsAssignableFrom(str.GetType()))
{
MessageBox.Show("Type \"" + str.GetType() + "\" is ok!");
}
else
{
MessageBox.Show("Bad Collection Member Type");
}
}
else
{
if (collection.GetType().GenericTypeArguments[0].IsAssignableFrom(str.GetType()))
{
MessageBox.Show("Type \"" + str.GetType() + "\" is ok!");
}
else
{
MessageBox.Show("Bad Collection Member Type");
}
}