編集:私の問題をはっきりと明確にするために、私は新しい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
あなたは、変数/メソッド/プロパティを混在させています。あなたは、リフレクションでプロパティの属性を読みたいと思うと思います。 Reflection(C#)を使用して属性にアクセスする_ https://msdn.microsoft.com/en-us/library/mt653983.aspx –
この質問には、「いいえ、あなたのそれをすることはできませんが、あなたの代わりにできることはここにあります」。 'CheckMethod'に渡される値は' List 'です。この値はどこから来たのか分かりません。 –
リフレクションを使用してプロパティの名前を簡単に取得することはできますが、使用できるプロパティの値だけではできません。プロパティを見つけるには、プロパティの名前(またはそれを識別する他のもの)を知っていなければなりません。その場合、あなたはちょうど鶏と卵の問題でこれをラップしました。メソッドに渡される値のソースの名前を絶対に知っていなければならない場合は、1.メソッドに渡された値にその名前を作成するか(.Nameプロパティを指定する)、または2.値の横に名前を渡します(余分なパラメータ) –