I\'m reflecting a property \'Blah\' its Type is ICollection
public ICollection Blah { get; set; }
private void button1_Click(object sender
You'll want to look at GetGenericTypeDefinition for example:
List<String> strings=new List<string>();
Console.WriteLine(strings.GetType().GetGenericTypeDefinition());
foreach (var t in strings.GetType().GetGenericArguments())
{
Console.WriteLine(t);
}
This will output:
System.Collections.Generic.List`1[T]
System.String
I had a similar but much more complicated problem... I wanted to determine if a type is assignable to collection type members or array type members dynamically.
So, here is better way how to get member type of collection or array dynamically with a validation if the type of an object to add is assignable to the collection or the array type members:
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");
}
}
You're looking for the GetGenericTypeDefinition method:
MessageBox.Show(pi.PropertyType.GetGenericTypeDefinition().ToString());