我想要做的可能有點奇怪。 但我想(這是最好的我可以解釋它)使用反射來獲取完整的類屬性樹名稱作爲字符串。獲得完整的類屬性「樹」名稱作爲字符串
成功的例子至今:
通過使用表情我能轉換:
() => Model.Cargo.Id
到字符串:
"Model.Cargo.Id"
我現在的問題是當我在混合使用數組時,我沒有得到數組名稱。我得到的只是最後一個屬性名稱。
不成功的例子:
Model.CargoTasks[j].IsSet
只返回我的字符串:
"IsSet"
理想我想下面的字符串結果:
"Model.CargoTasks[0].IsSet"
我可能會問有一點需要將結果包括在內,但如果這是可能的話,這將是幻想。
我使用來處理這些例子的代碼如下:
public static string ToMemberAccess<TResult>(this Expression<Func<TResult>> expression)
{
// Get the body of the expression
Expression body = expression.Body;
if (body.NodeType != ExpressionType.MemberAccess && body.NodeType != ExpressionType.Convert)
{
throw new ArgumentException("Property expression must be of the form '() => SomeProperty'", "expression");
}
var memberExpression = expression.Body as MemberExpression ?? ((UnaryExpression)expression.Body).Operand as MemberExpression;
var stuff = GetMemberNames(memberExpression);
stuff.Reverse();
return string.Join(".", stuff);
}
static List<string> GetMemberNames(MemberExpression expression, List<string> actual = null)
{
if (actual == null) actual = new List<string>();
var member = expression.Member;
var subExp = expression.Expression as MemberExpression;
actual.Add(member.Name);
if(subExp != null) actual = GetMemberNames(subExp, actual);
return actual;
}
感謝提前!任何幫助將不勝感激!
你可以只是做'expression.ToString()'非常接近 - 這將是像'()=>值(X).Model.CargoTasks [0] .IsSet' –
感謝響應。不過,我已經測試過它返回的東西更像是:'Model.CargoTasks.get_Item(value(Resources.AssignTasks.AssignTasks + <> c__DisplayClass5).j).IsSet' – MitchellNZ