假设我有这个课程:
class MyClass {
public int MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望将MyProperty作为字符串(例如"MyProperty"),但通过lambda表达式或任何其他"重构友好"的方式.
是否有类似这样的语法:
void BindToDataSource(IEnumerable<MyClass> list) {
myComboBox.DataSource = list;
myComboBox.DisplayMember = typeof(MyClass).GetPropertyToString(c => c.MyProperty);
}
Run Code Online (Sandbox Code Playgroud)
我不想这个代码:
myComboBox.DisplayMember = "MyProperty"
Run Code Online (Sandbox Code Playgroud)
因为它不是"重构友好".
看一下这个问题的答案:C#中缺少'nameof'操作符以解决类型安全数据绑定的问题?
在您的情况下,如果您实现此通用类:
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)
你可以像这样使用它:
void BindToDataSource(IEnumerable<MyClass> list)
{
myComboBox.DataSource = list;
myComboBox.DisplayMember = Nameof<MyClass>.Property(e => e.MyProperty);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |