c# - 是否可以创建一个方法来设置作为参数传递给它的属性的值?

标签 c# .net

我想做类似的事情:

SetPropertyValue(ref class1.Sport, prop2);

private static void SetPropertyValue(ref Prop1 prop1, bool prop2)
{
    prop1 = new Prop1
    {
        BoolValue = prop2,
    };
}

最佳答案

您可以使用 Lambda 表达式和一种方法来调用属性的 setValue。

创建这个方法:

public void SetPropertyValue<O, T>(O obj, Expression<Func<O, T>> property, T value)
{
    var memberSelectorExpression = property.Body as MemberExpression;
    if (memberSelectorExpression != null)
    {
        var p = memberSelectorExpression.Member as PropertyInfo;
        if (p != null)
        {
            p.SetValue(obj, value, null);
        }
    }
}

然后调用它

SetPropertyValue(textBox1, (t=>t.BackColor), Color.Red );

参见:

How to set property value using Expressions?

正如 Servy 建议的那样,性能对您来说可能是个问题。您还可以使用 CodeProject 中描述的不同技术:

http://www.codeproject.com/Articles/584720/ExpressionplusbasedplusPropertyplusGettersplusandp

关于c# - 是否可以创建一个方法来设置作为参数传递给它的属性的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22719657/

相关文章:

c# - 重定向所有网络流量

.net - System::Drawing::Bitmap 到 cv::Mat (OpenCV c++/cli)

c# - 如何使用 FileHelpers 编写带标题的 CSV 文件?

c# - 正则表达式替换字符串

Swift 中的 C# 异步等待

c# - 如何获取表行中的所有 HtmlInputText 控件?

c# - 在 C# 中内联使用返回多个值的函数

c# - 使用最小起订量多次调用相同的方法并获得不同的返回

mysql - 是否可以将 EntityFramework 与 MemSQL 一起使用?

c# - 自定义控件调整大小 C#