在动态对象上设置 属性 的通用方法

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);
}