var person = new Person();
Do(person.Firstname);
static void Do(object prop)
{
//find out "Firstname"...
}
我想找出一個屬性,的名字,我都進不去其父對象(人如上)的名字。可能嗎?獲得的財產
var person = new Person();
Do(person.Firstname);
static void Do(object prop)
{
//find out "Firstname"...
}
我想找出一個屬性,的名字,我都進不去其父對象(人如上)的名字。可能嗎?獲得的財產
不,這是不可能的。您的Person.Firstname
只是一個價值。該值對代碼中的位置或來源一無所知。
通過你的邏輯,將'int x'傳遞給一個函數使得不可能發現它是一個'int'。 – devRicher
@devRicher:完全不一樣。 'Firstname'是一個字符串。這就是'Do'可以知道的所有功能。它不知道它是一個字符串,恰好是名爲'Firstname'的'Person'的屬性。 OP想知道的是什麼。那必須分開通過。 –
在C#6你可以使用nameof
,但你必須將它傳遞給Do
之前使用它:
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
}
好的,謝謝!它可能工作,如果沒有別的可能,我會檢查它... – dbol
也許這樣的方法可以幫助你:
static void Do<TEntity, TProp>(TEntity entity, Expression<Func<TEntity, TProp>> property)
{
var member = property.Body as MemberExpression;
if (member != null)
{
var propertyName = member.Member.Name;
var propertyValue = property.Compile()(entity);
//Do something.
}
}
然後,你將能夠做這樣的事情:
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);
}
}
你想知道這個人的名字嗎?或者你基本上需要一個字符串「Firstname」嗎? – devRicher
您必須爲「名稱」設置單獨的參數。沒有任何東西阻止某人傳遞'Do(4)',在這種情況下,沒有「名字」可以獲得。 –
如果你添加了你需要的名字,也許你可以得到一個實際上有用的答案。 –