개체 A가 있고 개체 A는 개체 B이고 개체 B는 개체 C이고 개체 C는 속성이 Text
입니다.C#에서 속성 이름 가져 오기
'A.B.C.Text'를 전달할 때 어떻게 속성 Text
의 전체 이름을 얻을 수 있습니까? 정식으로 나는 A.B.C.Text
네임 스페이스가 아님을 의미합니다.
개체 A가 있고 개체 A는 개체 B이고 개체 B는 개체 C이고 개체 C는 속성이 Text
입니다.C#에서 속성 이름 가져 오기
'A.B.C.Text'를 전달할 때 어떻게 속성 Text
의 전체 이름을 얻을 수 있습니까? 정식으로 나는 A.B.C.Text
네임 스페이스가 아님을 의미합니다.
(나는 http://satalketo.com/2013/10/avoid-magic-strings/에서 아래의 클래스를 가지고) 이름을 검색하는 :
public static class @string
{
private static string GetMemberName(Expression expression)
{
switch (expression.NodeType)
{
case ExpressionType.MemberAccess:
var memberExpression = (MemberExpression)expression;
var supername = GetMemberName(memberExpression.Expression);
if (String.IsNullOrEmpty(supername))
return memberExpression.Member.Name;
return String.Concat(supername, '.', memberExpression.Member.Name);
case ExpressionType.Call:
var callExpression = (MethodCallExpression)expression;
return callExpression.Method.Name;
case ExpressionType.Convert:
var unaryExpression = (UnaryExpression)expression;
return GetMemberName(unaryExpression.Operand);
case ExpressionType.Constant:
case ExpressionType.Parameter:
return String.Empty;
default:
throw new ArgumentException("The expression is not a member access or method call expression");
}
}
public static string of<T>(Expression<Func<T>> expression)
{
return GetMemberName(expression.Body);
}
public static string of(Expression<Action> expression)
{
return GetMemberName(expression.Body);
}
public static string of<T>()
{
return typeof(T).Name;
}
}
그런 다음 클래스를 정의합니다.
class A
{
public A()
{
B = new B();
}
public B B { get; set; }
}
class B
{
public B()
{
C = new C();
}
public C C { get; set; }
}
class C
{
public String Text { get; set; }
}
마지막으로, 난 그냥 구걸
A a = new A();
Console.Write(@string.of(() => a.B.C.Text));
에서 만든 함수를 호출 //이 aBCText을 인쇄
지금처럼 객체를 정의합니다
class ObjectA
{
public ObjectB ObjB { get; set; }
}
class ObjectB
{
public ObjectC ObjC { get; set; }
}
class ObjectC
{
public string Text { get; set; }
}
이 그럼 당신은이 작업을 수행 할 수 있습니다 이 클래스는 하나입니다 : 이것은 잘 작동
public static void GenericTester()
{
var objA = new ObjectA {ObjB = new ObjectB {ObjC = new ObjectC {Text = "Hello"}}};
Console.WriteLine(objA.ObjB.ObjC.Text);
}
* 속성 * 이름 * 속성이 아닌 속성을 인쇄합니다. – Plutonix
'C' 당신이 말한 것과 부모 개체의 지식 (이 없습니다 우리는 지금까지) 그래서 당신은 알 수 없습니다. 클래스가 중첩되어 있으면 작동하지만 일반적으로 그렇게하고 싶지는 않습니다. – BradleyDotNET
설명대로 개체에 포함 관계가 없으므로 질문에 답변 할 수 없습니다. –
또한 A.B.C.Text –