另一个对象中的对象名称

时间:2011-07-12 04:25:38

标签: c# winforms reflection

我有一个名为Prescriptions的课程。它具有其他类的属性。因此,例如,Fills的属性名称将来自PDInt类,该类具有关于我需要的值的其他属性。

如果我想在Prescription类中设置Fills属性的值,它将类似于

Prescription p = new Prescription(); p.Fills.Value = 33;

所以现在我想获取Fills属性的名称并将其填充到winform控件中的tag属性中。

this.txtFills.Tag = p.Fills.GetType().Name;

但是当我这样做时,我得到了属性的基类,而不是属性名。因此,我没有获得“填充”,而是获得“PDInt”。

如何获取属性的实例化名称?

谢谢。

3 个答案:

答案 0 :(得分:7)

下面是extension method,当我想要像你一样工作时,我会使用它:

public static class ModelHelper
{
    public static string Item<T>(this T obj, Expression<Func<T, object>> expression)
    {
        if (expression.Body is MemberExpression)
        {
            return ((MemberExpression)(expression.Body)).Member.Name;
        }
        if (expression.Body is UnaryExpression)
        {
            return ((MemberExpression)((UnaryExpression)(expression.Body)).Operand)
                    .Member.Name;
        }
        throw new InvalidOperationException();
    }
}

将其用作:

var name = p.Item(x=>x.Fills);

有关方法如何运作的详细信息,请参阅Expression Tree in .Net

答案 1 :(得分:1)

查看此博客文章有用:{{3p>

这样做你需要使用.net框架的反射功能。

像这样的东西

Type type = test.GetType();

PropertyInfo[] propInfos = type.GetProperties();
for (int i = 0; i < propInfos.Length; i++) 
{
    PropertyInfo pi = (PropertyInfo)propInfos.GetValue(i);
    string propName = pi.Name;
}

答案 2 :(得分:0)

你可以像这样得到你吗? ↓

public class Prescription
{
    public PDInt Fills;
}

public class PDInt 
{
    public int Value;
}




Prescription p = new Prescription();
foreach(var x in p.GetType().GetFields())
{
    // var type = x.GetType();  // PDInt or X //Fills
}