【发布时间】:2020-04-15 19:41:21
【问题描述】:
这两个语句是一样的吗?
if (dep.BirthDate.HasValue) {
myObj.GetType().GetProperty("birthdate").SetValue(myObj, (DateTime)dep.BirthDate, null);
}
myObj.GetType().GetProperty("birthdate").SetValue(myObj, dep.BirthDate ?? null, null);
我只想设置有值的生日,但我想在 1 行中完成。
【问题讨论】:
-
不,不一样 - 在第一种情况下,您仅在指定出生日期时设置属性值(否则它将具有原始值),在第二种情况下,您始终为属性分配值(或者出生日期或为空)。结果可能非常不同,例如如果属性设置器抛出
ArgumentNullException -
好的,有没有办法在没有 if 的情况下获得 1 行中的第一个条件?
-
将其封装在执行 if-check 的方法中是唯一的方法,AFAIK。
-
同意@IanKemp - 你可以写PropertyInfo扩展
-
如果
birthdate是DateTime的类型,那么dep.BirthDate ?? default(DateTime)应该这样做...根据您之前的问题,您似乎正在重新发明AutoMapper
标签: c# null nullable gettype null-coalescing