在动态对象上设置 属性 的通用方法
Generic way to set property on dynamic object
我有一个动态对象。
如果 属性 存在
,我想将 属性 设置为一个值
private static void SetValue(ref dynamic property, object value)
{
if(property != null)
{
property = value;
}
}
所以这将是
SetValue(ref resource.name, "[parameters('name')]");
但是,这种方法不适用于动态,因为显然您不能为它们使用 ref
我该如何实施?如果这是唯一的方法,我很乐意使用扩展方法
我设置了很多可能存在也可能不存在的属性
如果没有这样的解决方案,我的代码将一团糟,因为我将不断需要检查 null
if (resource["name"] != null)
{
resource["name"] = "Value etc";
}
保罗
private static void UpdateValue<T, TProperty>(
ref T thing,
Func<T, TProperty> getter,
Action<T, TProperty> setter,
TProperty value)
{
if(getter(thing) != null)
{
setter(thing, value);
}
}
可以直接调用:
UpdateValue<Employee>(
ref person,
(p) => p.name,
(p, name) => p.name = name,
"John Smith");
或者使用一些辅助包装器:
private static void UpdateName(ref Employee person, string name)
{
UpdateValue(
ref person,
(p) => p.name,
(p, name) => p.name = name,
name);
}
private static void UpdateDob(ref Employee person, DateTime dob)
{
UpdateValue(
ref person,
(p) => p.DateOfBirth,
(p) => p.DateOfBirth = dob,
dob);
}
我有一个动态对象。
如果 属性 存在
,我想将 属性 设置为一个值 private static void SetValue(ref dynamic property, object value)
{
if(property != null)
{
property = value;
}
}
所以这将是
SetValue(ref resource.name, "[parameters('name')]");
但是,这种方法不适用于动态,因为显然您不能为它们使用 ref
我该如何实施?如果这是唯一的方法,我很乐意使用扩展方法
我设置了很多可能存在也可能不存在的属性
如果没有这样的解决方案,我的代码将一团糟,因为我将不断需要检查 null
if (resource["name"] != null)
{
resource["name"] = "Value etc";
}
保罗
private static void UpdateValue<T, TProperty>(
ref T thing,
Func<T, TProperty> getter,
Action<T, TProperty> setter,
TProperty value)
{
if(getter(thing) != null)
{
setter(thing, value);
}
}
可以直接调用:
UpdateValue<Employee>(
ref person,
(p) => p.name,
(p, name) => p.name = name,
"John Smith");
或者使用一些辅助包装器:
private static void UpdateName(ref Employee person, string name)
{
UpdateValue(
ref person,
(p) => p.name,
(p, name) => p.name = name,
name);
}
private static void UpdateDob(ref Employee person, DateTime dob)
{
UpdateValue(
ref person,
(p) => p.DateOfBirth,
(p) => p.DateOfBirth = dob,
dob);
}