Pau*_*tin 44 .net c# data-binding .net-3.5 .net-2.0
nameof在C#中包含运算符的情绪很多.作为此运算符如何工作的示例,nameof(Customer.Name)将返回字符串"Name".
我有一个域对象.我必须绑定它.然后我需要属性的名称作为字符串.我希望它们是类型安全的.
我记得在.NET 3.5中遇到过一种解决方法,它提供了nameoflambda表达式的功能和涉及的lambda表达式.但是,我无法找到此解决方法.任何人都可以为我提供这种解决方法吗?
我也对nameof如果可能的话在.NET 2.0中实现功能的方法感兴趣.
res*_*efm 77
这段代码基本上是这样的:
class Program
{
static void Main()
{
var propName = Nameof<SampleClass>.Property(e => e.Name);
Console.WriteLine(propName);
}
}
public class Nameof<T>
{
public static string Property<TProp>(Expression<Func<T, TProp>> expression)
{
var body = expression.Body as MemberExpression;
if(body == null)
throw new ArgumentException("'expression' should be a member expression");
return body.Member.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
(当然是3.5代码...)
虽然reshefm和Jon Skeet使用表达式显示了正确的方法,但值得注意的是,为方法名称执行此操作的方法更便宜:
绕过你的方法包装一个委托,得到MethodInfo,你就可以了.这是一个例子:
private void FuncPoo()
{
}
...
// Get the name of the function
string funcName = new Action(FuncPoo).Method.Name;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这只适用于方法; 它不适用于属性,因为您不能拥有属性getter或setter方法的委托.(看起来像一个愚蠢的限制,IMO.)
| 归档时间: |
|
| 查看次数: |
21643 次 |
| 最近记录: |