使用反射按名称获取属性值

par*_*ent 2 .net c# system.reflection

可以说我有以下课程:

public class Provider
{
    ...
    public sealed class Slice
    {
         public readonly double firstName;
         public readonly double secondName;
         public readonly double thirdName;
         ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

此类用于保存滑动时间序列,包含的Slice类是返回值.(Provider.Last属性返回Slice的最新实例).

我需要通过属性的名称获取最新返回的Slice类的属性值.

PropertyInfo secondNameProperty = Provider.Last.GetType().GetProperty("secondName");
double secondNameValue = (double)secondNameProperty.GetValue(Provider.Last, null);
Run Code Online (Sandbox Code Playgroud)

GetProperty返回null.我怎样才能做到这一点?

Jon*_*eet 9

看看你的Slice班级:

public sealed class Slice
{
     public readonly double firstName;
     public readonly double secondName;
     public readonly double thirdName;
     ...
}
Run Code Online (Sandbox Code Playgroud)

那些不是属性.他们是田地.要么使它们成为属性,要么使用它们Type.GetField().使用属性通常是一个更好的主意,IMO,并且不需要很难.例如,如果您只想将它​​们公开为只读,则可以使用:

public sealed class Slice
{
     public double FirstName { get; private set; }
     public double SecondName { get; private set; }
     public double ThirdName { get; private set; }
     ...
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以直接声明只读字段,然后通过属性公开它们.这比使用自动实现的属性要多一些,但它消除了在Slice自身内部设置属性的可能性.

(顺便说一句,你真的有一个firstName类型的领域double吗?奇怪.)