c# - 作为属性和对象类型的函数参数的表达式
问题描述
我需要一个函数,它将以下内容作为参数:
- 对象的类型
- 对象的特定属性的名称
目前我以相当不方便和漫长的方式做到这一点:
public static void Add<TEntity, TProperty>(TEntity e, Expression<Func<TProperty>> expression)
{
var type = typeof(TEntity);
var propertyName = ((MemberExpression) expression.Body).Member.Name;
}
这会导致这样的函数调用:Add(Foo, () => Foo.Bar);
但是,使用该解决方案我有几个问题:
- 当我有这样的对象时,它会变得很长:
Add(Foo.Bar.Element.Type, () => Foo.Bar.Element.Type.Name)
而且看起来很丑。 - 不能确保它
propertyName
是对象类型的属性。- 我实际上并没有真正做任何事情,
e
所以它没有被使用。
- 我实际上并没有真正做任何事情,
有没有更好的解决方案?
解决方案
您可以通过向 lambda 添加参数来解决第一个问题:
public static void Add<TEntity, TProperty>(TEntity e, Expression<Func<TEntity, TProperty>> expression)
Add(Foo.Bar.Element.Type, x => x.Name)
推荐阅读
- c++ - 在 VS2017 上调试简单程序时访问冲突(RtlActivateActivationContextUnsafeFast)
- python - 启动 IPython(又名 Jupyter)笔记本时如何运行“启动”代码?
- python - 我似乎无法在终端中使用 pydoc raw_input(Windows)
- selenium - Xpath匹配多个字符串的大小写敏感
- java - 使用 Selenium Grid 在 MacOS Mojave 上运行 Safari
- c - c、修剪字符串和宽字符
- database - 操作系统与数据库管理系统
- android - 通知永远不会在模拟器中显示
- jquery - 检测包含特定 div 的部分何时更改类?
- c - c如何计算余数?