c# - 如何将通用属性作为参数传递给函数?

标签 c# generics

我需要编写一个函数来接收一个属性作为参数并执行它的 getter。

如果我需要传递一个函数/委托(delegate),我会使用:

delegate RET FunctionDelegate<T, RET>(T t);

void func<T, RET>(FunctionDelegate function, T param, ...)
{
    ...
    return function.Invoke(param);
}

是否有类似的方法来定义属性,以便我可以在函数代码中调用它的 getter 和/或 setter?

最佳答案

你也可以这样写:

static void Method<T, U>(this T obj, Expression<Func<T, U>> property)
        {
            var memberExpression = property.Body as MemberExpression;
            //getter
            U code = (U)obj.GetType().GetProperty(memberExpression.Member.Name).GetValue(obj, null);
            //setter
            obj.GetType().GetProperty(memberExpression.Member.Name).SetValue(obj, code, null);
        }

调用示例:

DbComputerSet cs = new DbComputerSet();
cs.Method<DbComputerSet, string>(set => set.Code);

关于c# - 如何将通用属性作为参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/110562/

相关文章:

c# - 比较两个对象并找出差异

c# - JsonConvert.DeserializeObject 上的 StackOverflowException

c# - 在运行时确定 C# P/Invoke 结构对齐

java - 如何在java中实现将泛型类型数组转换为泛型类型二维数组的函数?

c# - 在以下上下文中我应该使用什么 - 方法重载或使用泛型?

c# - 如何在winforms中使分组框文本居中?

c# - 定义仅在一个类中定义 ICollection<> 的多对多连接

c# - 将列表<int> 转换为列表<long>

generics - 如何制作通用的绝对值函数?

java - 静态泛型方法