編輯:爲了清楚地說明我的問題,我詢問了一個新的question。如何使用C#中的反射區分具有相同屬性的類成員
編輯:由於反射的解決方案是不可能的,所以我從改了稱呼「?有沒有辦法讓在C#中的變量名」 「如何辨別類成員使用C#反射相同屬性」
編輯:變量名是不準確的意思,我的目標是
- 獲取可能的話使用反射變量名(有人已經告訴我這是不可能的)。
- 使用解決方案來獲取在任何情況下聲明成員時添加的信息,例如在CheckMethod中。
我想我可以使用反射來獲取變量信息,包括其名稱,但不起作用。
public class C
{
public List<string> M1{get; set;}
public List<string> M2{get; set;}
}
static void Main(string[] args)
{
C c = new C();
CheckMethod(c.M1);
ChekcMethod(c.M2);
}
void CheckMethod(List<string> m)
{
//Want to get the name "M1" or "M2", but don't know how
Console.Write(m.VariableName);
}
然後,我想屬性可能是解決方案。
public class C
{
[DisplayName("M1")]
public List<string> M1{get; set;}
[DisplayName("M2")]
public List<string> M2{get; set;}
}
static void Main(string[] args)
{
C c = new C();
CheckMethod(c.M1);
ChekcMethod(c.M2);
}
void CheckMethod(List<string> m)
{
//Find all properties with DisplayNameAttribute
var propertyInfos = typeof(C)
.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
| BindingFlags.GetField | BindingFlags.GetProperty)
.FindAll(pi => pi.IsDefined(typeof(DisplayNameAttribute), true));
foreach (var propertyInfo in propertyInfos)
{
//I can get the DisplayName of all properties, but don't know m is M1 or M2
}
}
是否有任何本地反射的方式來獲得變量的名稱?這是不可能的- 如何確定方法參數代表哪個成員變量?
我與Unity3D工作,所以.NET版本是3.5
你在混合東西,變量/方法/屬性。我想你想用反射來讀取屬性的屬性。您可能會看看這裏:_Accessing屬性通過使用反射(C#)_ https://msdn.microsoft.com/en-us/library/mt653983.aspx –
此問題將只有答案沿着「不,你不能這樣做,但這是你可以做的「。傳遞給'CheckMethod'的值是'List',這個值不知道它來自哪裏。 –
您可以使用反射輕鬆獲取屬性的名稱,但只能使用可用屬性的值才能完成此操作。要找到該房產,您必須知道房產的名稱(或其他標識該房產的名稱),在這種情況下,您已經將其包裹在雞與雞蛋問題中。如果您絕對必須知道傳遞給方法的值的源名稱,請將其名稱構建到傳遞給方法的值中(賦予它一個.Name屬性),或者2.將名稱與值一起傳遞(額外的參數) –