另一个对象中的对象名称



我有一个类叫prescription。它有其他类的属性。因此,例如,填充属性名将来自PDInt类,该类具有关于我需要的值的其他属性。

如果我想在Prescription类中设置fill属性的值它应该是这样的

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

现在我想取填充属性的名称并将其填充到winform控件的标签属性中。

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

然而,当我这样做时,我得到的是属性的基类,而不是属性名。所以我得到的不是" fill "而是"PDInt"

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

谢谢。

下面是一个扩展方法,当我想像你一样工作时,我使用它:

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

有关方法工作原理的详细信息,请参见。net中的表达式树

查看这篇有用的博文:http://handcraftsman.wordpress.com/2008/11/11/how-to-get-c-property-names-without-magic-strings/

你需要使用。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;
}

你能得到这样的你吗?↓

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
}

相关内容

  • 没有找到相关文章

最新更新