1
A
回答
3
编辑以下澄清的要求:
var foo = GetYourObjectFromSomewhere();
string bar = ExprToString(() => foo.Property); // bar = "foo.Property"
// ...
public static string ExprToString<T>(Expression<Func<T>> e)
{
// use a stack and a loop so that we can cope with nested properties
// for example, "() => foo.First.Second.Third.Fourth.Property" etc
Stack<string> stack = new Stack<string>();
MemberExpression me = e.Body as MemberExpression;
while (me != null)
{
stack.Push(me.Member.Name);
me = me.Expression as MemberExpression;
}
return string.Join(".", stack.ToArray());
}
原来的答复:
这不是完全清楚你需要什么,或者什么的
object.Property
类型是摆在首位。也许下列其中一个可以做到这一点?
// either
() => (string)object.Property
// or
() => object.Property.ToString()
2
根据您的补充说明和要求,可以通过询问的Expression<Func<T, TProperty>>
instaed一个Func<T, TProperty>
的解决这个问题。
您可以实现这个是这样的:
public string GetPropertyName<T, TProperty>(Expression<Func<T, TProperty>> propertyPicker)
{
MemberExpression me = (MemberExpression)propertyPicker.Body;
return me.Member.Name;
}
这将允许你这样称呼它:
string name = GetPropertyName(x => x.Property);
由于存在从Func<T, TResult>
到Expression<Func<T, TResult>>
的隐式转换。
更完整的解释以及可重复使用的API可以在Kzu's blog上找到。
相关问题
- 1. js,将字符串转换为函数
- 2. 如何将匿名函数转换为常规函数?
- 3. 在PHP中,如何将参数名称转换为字符串
- 4. 从C#调用C DLL函数 - 将字符参数转换为字符串
- 5. 如何将字符串转换为函数名称
- 6. 将字符串转换为数字node.js
- 7. Knockout.js将数字转换为字符串
- 8. 将字符串转换为数字
- 9. Android:EditTextPreference将字符串转换为数字
- 10. rails将字符串转换为数字
- 11. Fortran将字符串转换为数字
- 12. 将字符串转换为数字
- 13. 将函数调用字符串解析为名称和参数
- 14. JavaScript:如何将匿名函数作为函数参数传递?
- 15. 将值作为函数参数传递给匿名函数
- 16. 将匿名函数转换为命名函数的JQuery不能正常工作
- 17. CMake的函数字符串转换为C字符串字面
- 18. ASP.NET无法参数值从字符串转换为datetime
- 19. oracle clob参数转换为字符串挂在asp.net
- 20. 通过匿名函数作为参数
- 21. 将字符串转换为DateTime C#ASP.NET
- 22. 将字符串转换为DateTime Asp.Net
- 23. Python/Numpy/Scipy - 将字符串转换为数学函数
- 24. 将字符串转换为整数的递归函数ML
- 25. 定义函数将字符串转换为Python中的整数
- 26. 如何将字符串转换为函数内的整数?
- 27. 注意:数组到字符串转换将数组转换为字符串
- 28. python字符串替换函数参数
- 29. 数转换为字符串
- 30. 将字符串转换为整数
'object.Property'开头的是什么类型? – LukeH 2010-01-06 11:08:52
我试图将强类型属性名称传递给函数。而不是将“Article.Title”编码为字符串,我宁愿传递()=> Article.Title。这更清楚吗? – user10479 2010-01-06 11:12:34