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<>);
}
}
}
が動作します。私が答えを受け入れる前に、この "List'1" .Split( ''')[0]を行うための基本型を総称的に決定する唯一の方法は?あなたがList :: 1ではなくAFAIKのようなジェネリック型、すなわち 'List'のフレンドリーな名前を知りたければ、文字列の操作は、文字列の操作であるGetGenericTypeDefinition().GetGenericTypeDefinition()。Name.Split( ''')[0] – sgtz
@sgtz行く! – VinayC