使用 GetProperty c#

问题描述 投票:0回答:1

我目前正在

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; }

}`

任何帮助或指导将非常受欢迎,因为我认为这是由于该财产不公开,但实际上是。

提前感谢您对此的任何指点

c# .net reflection blazor .net-8.0
1个回答
0
投票

我猜你的问题出在

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; }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.