Determine if a property is a kind of array by reflection

后端 未结 5 598
悲&欢浪女
悲&欢浪女 2020-12-24 01:46

How can I determine if a property is a kind of array.

Example:

public bool IsPropertyAnArray(PropertyInfo property)
{
    // return true if type is I         


        
5条回答
  •  醉梦人生
    2020-12-24 02:08

    You appear to be asking two different questions: whether a type is an array (e.g. string[]) or any collection type.

    For the former, simply check property.PropertyType.IsArray.

    For the latter, you have to decide what is the minimum criteria you want a type to conform to. For example, you could check for the non-generic IEnumerable by using typeof(IEnumerable).IsAssignableFrom(property.PropertyType). You can also use this for generic interfaces if you know the actual type of T, e.g. typeof(IEnumerable).IsAssignableFrom(property.PropertyType).

    Checking for the generic IEnumerable or any other generic interface without knowing the value of T can be done by checking if property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName) is not null. Note that I didn't specify any type for T in that code. You can do the same for IList or any other type you're interested in.

    For example you could use the following if you want to check for the generic IEnumerable:

    public bool IsPropertyACollection(PropertyInfo property) 
    { 
        return property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName) != null;
    } 
    

    Arrays also implement IEnumerable, so they will also return true from that method.

提交回复
热议问题