using System;
using System.Linq;
using System.Collections.Generic;
public class Test
{
class Foo<T> {
public List<T> field1;
public List<int> field2;
}
public static void Main()
{
var t = typeof(Foo<string>);
var g = t.GetGenericTypeDefinition();
var a = g.GetGenericArguments();
foreach (var f in g.GetFields()) {
var ft = f.FieldType;
if (!ft.IsGenericType) continue;
var da = ft.GetGenericArguments();
if (da.Any(xt => a.Contains(xt))) {
Console.WriteLine("Field {0} uses generic type parameter", f.Name);
} else {
Console.WriteLine("Field {0} does not use generic type parameter", f.Name);
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CgljbGFzcyBGb288VD4gewoJCXB1YmxpYyBMaXN0PFQ+IGZpZWxkMTsKCQlwdWJsaWMgTGlzdDxpbnQ+IGZpZWxkMjsKCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciB0ID0gdHlwZW9mKEZvbzxzdHJpbmc+KTsKCQl2YXIgZyA9IHQuR2V0R2VuZXJpY1R5cGVEZWZpbml0aW9uKCk7CgkJdmFyIGEgPSBnLkdldEdlbmVyaWNBcmd1bWVudHMoKTsKCQlmb3JlYWNoICh2YXIgZiBpbiBnLkdldEZpZWxkcygpKSB7CgkJCXZhciBmdCA9IGYuRmllbGRUeXBlOwoJCQlpZiAoIWZ0LklzR2VuZXJpY1R5cGUpIGNvbnRpbnVlOwoJCQl2YXIgZGEgPSBmdC5HZXRHZW5lcmljQXJndW1lbnRzKCk7CgkJCWlmIChkYS5BbnkoeHQgPT4gYS5Db250YWlucyh4dCkpKSB7CgkJCQlDb25zb2xlLldyaXRlTGluZSgiRmllbGQgezB9IHVzZXMgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlciIsIGYuTmFtZSk7CgkJCX0gZWxzZSB7CgkJCQlDb25zb2xlLldyaXRlTGluZSgiRmllbGQgezB9IGRvZXMgbm90IHVzZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyIiwgZi5OYW1lKTsKCQkJfQoJCX0KCX0KfQ==