- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据我的 Select a model property using a lambda and not a string property name 的答案采取行动问题,想要向集合添加属性,如下所示:
var props = new ExportPropertyInfoCollection<JobCard>();
props.Include(model => model.BusinessInstallNumber).Title("Install No").Width(64).KeepZeroPadding(true);
props.Include(model => model.DeviceName).Title("Device").Width(70);
props.Include(model => model.DateRequested).Title("Request Date").Format("{0:dd/MM/yyyy}").Width(83);
我在Include
方法中编写了以下代码:
public class PropertyCollection<T>
{
public void Include(Expression<Func<T, object>> expression)
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression != null)
{
var pes = new ExportPropertyInfoBuilder {Property = new ExportPropertyInfo {Property = memberExpression.Member as PropertyInfo}};
Properties.Add(pes.Property.Property.Name, pes.Property);
return pes;
}
但是,在运行代码时,我发现一些 lambda 产生了预期的 MemberExpression 值,但其他 lambda 产生了 UnaryExpression 值。我必须将第一行代码更改为以下内容,然后才能使用 lambda 添加所有属性:
var memberExpression = expression.Body as MemberExpression ?? ((UnaryExpression) expression.Body).Operand as MemberExpression;
POCO 业务对象中的所有属性都是“简单”类型,即 string、DateTime、int、bool 等。它们用几个不同的 DataAnnotations 属性进行装饰。
是什么导致我的示例中的某些 lambda 产生 MemberExpression 值和其他 UnaryExpression 值?在我的示例中,第一个 UnaryExpression 位于第三行,即 DateTime 属性,但 bool 属性也会生成 UnaryExpressions。
最佳答案
我想我知道问题出在哪里。您的表达式返回类型 object
。
如果将其更改为 Expression<Func<T, R>>
应该正确推断返回类型,并且 UnaryExpression
(我假设这是一些拳击操作)不应该发生。
更新:
Include
的签名应该是:
public void Include<T, R>(Expression<Func<T, R>> expression)
关于.net - 为什么有些对象属性是 UnaryExpression,而另一些对象属性是 MemberExpression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567857/
如何通过匹配 UnaryExpression“成员名称”而不使用“直接”反射来获取对象属性值? public object DoSomething(UnaryExpression uExp, T ob
描述 我有一个表达式指向我的类型的属性。但它不适用于所有属性类型。 "不是意思"是什么意思它导致不同的表达类型。我以为它会导致MemberExpression 但事实并非如此。 对于 int 和 Gu
根据我的 Select a model property using a lambda and not a string property name 的答案采取行动问题,想要向集合添加属性,如下所示:
我创建了一个 method in C#获取方法名 public string GetCorrectPropertyName(Expression> expression) { return ((
我是一名优秀的程序员,十分优秀!