Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#动态检索属性值_C#_Reflection_Types_Properties - Fatal编程技术网

C#动态检索属性值

C#动态检索属性值,c#,reflection,types,properties,C#,Reflection,Types,Properties,我正在尝试在我的应用程序中动态获取属性的数据类型。我有下面一行代码使用属性的支持变量的名称来获取类型,并且它工作正常 var tobj_Type = this.GetType().GetField("ii_ServerPort", BindingFlags.Public | BindingFlags.Instance).GetValue(this).GetType(); 在这行代码中,我尝试使用属性的名称来获取类型 var tobj_PropertyType = this.GetType().

我正在尝试在我的应用程序中动态获取属性的数据类型。我有下面一行代码使用属性的支持变量的名称来获取类型,并且它工作正常

var tobj_Type = this.GetType().GetField("ii_ServerPort", BindingFlags.Public | BindingFlags.Instance).GetValue(this).GetType();
在这行代码中,我尝试使用属性的名称来获取类型

var tobj_PropertyType = this.GetType().GetField("ServerPort", BindingFlags.Public | BindingFlags.Instance).GetValue(this).GetType();
失败,出现以下错误: 对象引用未设置为对象的实例

知道如何在这里使用属性名而不是支持变量吗?

使用方法而不是
GetField


您对GetField的调用返回null,因为它们不是名为ServerPort的字段,只是一个属性。

是的,但由于它是一个属性而不是字段,您需要使用:

使用
GetProperty
BindingFlags.Public | BindingFlags.Instance
是默认值,无需显式指定


另外,
PropertyInfo
有一个
PropertyType
属性,因此不需要访问该值。

是否也有一个
bindingsflag.property
呢?@TanveerBadar没有,但是有一个
GetProperty
方法。@TanveerBadar-我在任何示例中都没有看到,但是有。它们是GetProperty、PutDispProperty、PutRefDispProperty和Set属性。我尝试了GetProperty并收到了相同的错误。还有一个GetProperty可以用来代替GetField。我试过了,也收到了同样的错误。最后,我确实觉得人们在没有给出确切答案的情况下投票否决这个问题有点粗鲁“我尝试了GetProperty,但收到了相同的错误。”您可以发布此尝试吗?密码?还请发布一行代码,说明如何直接访问此变量,或者甚至可能是具有此属性的类的布局。我为此工作了五个小时。我觉得付出了合理的努力。即使在这里,也没有人能告诉我实现结果应该使用的标志和函数的确切组合。在第一篇文章之后,我尝试只使用GetProperty绑定标志。这不起作用,然后我将函数从GetField更改为GetProperty(仍然带有GetProperty绑定标志)(这不起作用。Johnathan Barclay的答案有效。我使用了this.GetType().GetProperty(“ServerPort”,BindingFlags.Public | BindingFlags.Instance).GetValue(this.GetType();
var tobj_PropertyType = this.GetType().GetProperty("ServerPort").PropertyType;