我目前正在
Blazor
开发一个 .NET8
项目,并且在尝试使用 reflection
在运行时访问公共属性时遇到一些问题。
问题: 我在运行时有一个
objects[]
数组,一旦使用 properties
将数组向下钻取到类型,我就无法访问所需的 reflection
值。
到目前为止,我已经尝试过此操作,我可以看到属性和类型值,但无法访问它们。
//Have to use reflection as we don't now the type at compile time
var type = obj[i].GetType();
//I can see all of the public properties in this array
object[] PropertyInfo = type.GetProperties();
//but when I try and access one of the properties, I get null
var property = type.GetProperty("Name");
//The name should be accessable here??
var name = property.GetValue(obj[i]);
公共模型:
public class MyClass
{
public int Address { get; set; }
public string Name { get; set; }
}`
任何帮助或指导将非常受欢迎,因为我认为这是由于该财产不公开,但实际上是。
提前感谢您对此的任何指点
我猜你的问题出在
i
。 您没有展示循环或如何使用它。
这是一个基于您的有效代码的 Blazor 演示页面。 请注意,我使用 @foreach 在降低的代码中定义了
obj
的本地副本。
@page "/"
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
@foreach(var obj in _list)
{
var type = obj.GetType();
var property = type.GetProperty("Name");
var value = property?.GetValue(obj);
<div>Type: @type.Name - Value: @value </div>
}
@code {
private object[] _list = {
new MyClass() { Name="Fred", Address = 1 },
new MyClass1() { Name="Joe", Address = 2 },
};
private string? _name;
protected override void OnInitialized()
{
Type type = _list[0].GetType();
}
public class MyClass
{
public int Address { get; set; }
public string? Name { get; set; }
}
public class MyClass1
{
public int Address { get; set; }
public string? Name { get; set; }
}
}