C# 获取属性的名称
我想找出一个属性的名称,,我无法访问它的父对象(如上所述的人)。可能吗?不,不可能。您的C# 获取属性的名称,c#,C#,我想找出一个属性的名称,,我无法访问它的父对象(如上所述的人)。可能吗?不,不可能。您的Person.Firstname只是一个值。该值不知道它在代码中的位置或来源。在C#6中,您可以使用nameof,但必须在将其传递给Do之前使用它: var person = new Person(); Do(person.Firstname); static void Do(object prop) { //find out "Firstname"... } 如果需要值和名称,则必须将它们作为单
Person.Firstname
只是一个值。该值不知道它在代码中的位置或来源。在C#6中,您可以使用nameof
,但必须在将其传递给Do
之前使用它:
var person = new Person();
Do(person.Firstname);
static void Do(object prop)
{
//find out "Firstname"...
}
如果需要值和名称,则必须将它们作为单独的参数传递:
Do(nameof(person.Firstname));
static void Do(object prop)
{
// prop is the string Firstname
}
也许这样的方法可以帮助您:
Do(person.FirstName, nameof(person.Firstname));
static void Do(object prop, string name)
{
// name is the string Firstname
// prop is the value of person.Firstname
}
实际上不能用属性来做,但可以用方法来做,包括一个与属性完全相同的方法。比如说
Do(person, p => p.FirstName);
Do(person, p => p.LastName);
班级人员
{
公共字符串GetName(){返回“John Doe”;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var p=新人();
Do(p.GetName);//注意GetName后面的no()
}
静态无效Do(函数f)
{
WriteLine(String.Format(“调用方通过名为{1}”、f.Invoke()、f.method.Name的方法发送了值“{0}”);
}
}
你想知道这个人的名字
,还是你基本上需要一个字符串“Firstname”
?你必须为“name”指定一个单独的参数。没有任何东西可以阻止某人通过Do(4)
,在这种情况下,没有“name”要获得。如果你添加了你需要的名称,也许你可以得到一个实际有用的答案。出于好奇,你需要它做什么?按照你的逻辑,将int x
传递到函数中会使你无法发现它是int
@devRicher:这根本不一样。Firstname
是一个字符串。这是一个ll函数Do
可以知道它。它不知道它是一个字符串,恰好是Person
的属性,名为Firstname
。这是OP想要知道的。这必须单独传递。好的,谢谢!如果没有其他可能,它可能会工作,我会检查它。。。
Do(person, p => p.FirstName);
Do(person, p => p.LastName);
class Person
{
public string GetName() { return "John Doe"; }
}
class Program
{
static void Main(string[] args)
{
var p = new Person();
Do(p.GetName); //Notice no () after GetName
}
static void Do(Func<string> f)
{
Console.WriteLine(String.Format("The caller sent the value '{0}' via a method named {1}", f.Invoke(), f.Method.Name);
}
}