IList または List をプロパティとして持っているとします。リストまたは IList であることがどのようにわかりますか? 試行錯誤に頼らずにこれを行うことはできますか?
型の名前は List`1 のようなものになりがちです。文字列のハックを検討するのは合理的ですか?
class Program {
public class Class1 {
public int a { get; set; }
public IList<int> list { get; set; }
public List<int> concreteList { get; set; }
}
static void Main(string[] args)
{
Test1();
Test2();
}
private static void Test1()
{
var t = typeof (Class1);
var p = t.GetProperty("list");
if (p.PropertyType.IsInterface && p.PropertyType.IsGenericType)
{
var ps = p.PropertyType.GetGenericArguments();
var underlying = p.PropertyType.GetInterface("IList");
var b = underlying == typeof (IList<>);
}
}
private static void Test2() {
var t = typeof(Class1);
var p = t.GetProperty("concreteList");
if (!p.PropertyType.IsInterface && p.PropertyType.IsGenericType) {
var ps = p.PropertyType.GetGenericArguments();
var underlying3 = p.PropertyType.GetGenericTypeDefinition();
var b = underlying3 == typeof (List<>);
}
}
}