3

私はクラスを持っています:

    class Person 
    {
        public string Name { get { return "Antonio"; } }
    }

そしてコード:

        IEnumerable<object> uncknownObject;

        uncknownObject = new ObservableCollection<Person>( );

        var observCol = uncknownObject.GetType( );

        var x = ( ( dynamic )observCol ).GenericTypeArguments[ 0 ];

        var y = observCol.GetProperty( "GenericTypeArguments" );

        var instance = ( Person )Activator.CreateInstance( x );

        Console.WriteLine( instance.Name ); // Print Antonio!!!

なぜy == nullですか?

写真に注意してください:

ここに画像の説明を入力

デバッガーは、プロパティGenericTypeArgumentsが存在する必要があることを示し、コードは反対を示しま​​す。デバッガーが正しく、そのプロパティが存在することを証明できます。なぜなら、x が null ではないからです。そのプロパティが存在する場合、なぜynullに等しいのですか!!!???


編集

アニのおかげで、私は今持っています:

        IEnumerable<object> uncknownObject;

        uncknownObject = new ObservableCollection<Person>();

        var observCol = uncknownObject.GetType();

        var genTypeArgsProperty = typeof(Type).GetProperty("UnderlyingSystemType");

        var genTypeArgsValue = (genTypeArgsProperty.GetValue(observCol, null));

        var f = genTypeArgsValue.GetType().GetMethod("GetGenericArguments");

        IEnumerable<object> result = (IEnumerable<object>)f.Invoke(genTypeArgsValue, null);

        var x = result.FirstOrDefault();

        var instance = Activator.CreateInstance(  (Type)x );

その機能が必要な理由については、ここをクリックしてください

4

2 に答える 2

3

This code works with net framework 4:

        IEnumerable<object> uncknownObject;

        uncknownObject = new ObservableCollection<Person>();



        var observCol = uncknownObject.GetType();

        var x = ((dynamic) observCol).UnderlyingSystemType.GetGenericArguments()[0];

        var y = observCol.GetGenericArguments();

        var instance = (Person)Activator.CreateInstance(x);

        Console.WriteLine(instance.Name); // Print Antonio!!!
于 2013-02-01T05:15:10.073 に答える