我有一个名为Prescriptions的课程。它具有其他类的属性。因此,例如,Fills的属性名称将来自PDInt类,该类具有关于我需要的值的其他属性。
如果我想在Prescription类中设置Fills属性的值,它将类似于
Prescription p = new Prescription();
p.Fills.Value = 33;
所以现在我想获取Fills属性的名称并将其填充到winform控件中的tag属性中。
this.txtFills.Tag = p.Fills.GetType().Name;
但是当我这样做时,我得到了属性的基类,而不是属性名。因此,我没有获得“填充”,而是获得“PDInt”。
如何获取属性的实例化名称?
谢谢。
答案 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
}