【发布时间】:2013-01-16 09:25:42
【问题描述】:
我有课:
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 怎么不为空。如果该属性存在,那么为什么y 等于 null!!!???
编辑
感谢 Ani,我现在有了:
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 );
In case of curios why I needed that functionality click here
【问题讨论】:
-
那是 VS 2010 吗?
GenericTypeArguments直到 .Net 4.5 才存在。 -
@mikez:那么它是如何出现在调试器中的???
-
@leppie 我不知道,但根据文档,它是在 .NET 4.5 中添加的(支持的框架只有 .NET 4.5):msdn.microsoft.com/en-us/library/…
-
@mikez:我只能假设,即使安装了 .NET 4.5,即使使用 VS2010。
标签: c# dynamic reflection