加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 是否可以将属性名称作为字符串传入并为其赋值?

发布时间:2020-12-15 06:14:32 所属栏目:百科 来源:网络整理
导读:我正在设置一个简单的帮助器类来保存我正在解析的文件中的一些数据.属性的名称与我期望在文件中找到的值的名称相匹配.我想在我的类中添加一个名为AddPropertyValue的方法,这样我就可以为属性赋值而无需通过名称显式调用它. 该方法如下所示: //C#public void
我正在设置一个简单的帮助器类来保存我正在解析的文件中的一些数据.属性的名称与我期望在文件中找到的值的名称相匹配.我想在我的类中添加一个名为AddPropertyValue的方法,这样我就可以为属性赋值而无需通过名称显式调用它.

该方法如下所示:

//C#
public void AddPropertyValue(string propertyName,string propertyValue) {
   //code to assign the property value based on propertyName
}

---

'VB.NET'
Public Sub AddPropertyValue(ByVal propertyName As String,_
                            ByVal propertyValue As String)
    'code to assign the property value based on propertyName '
End Sub

实现可能如下所示:

C#/ VB.NET

MyHelperClass.AddPropertyValue("LocationID","5")

这是否可以,而不必针对提供的propertyName测试每个单独的属性名称?

解决方法

您可以通过调用Type.GetProperty然后调用PropertyInfo.SetValue来执行此操作.您需要进行适当的错误处理,以检查实际上不存在的属性.

这是一个示例:

using System;
using System.Reflection;

public class Test
{
    public string Foo { get; set; }
    public string Bar { get; set; }

    public void AddPropertyValue(string name,string value)
    {
        PropertyInfo property = typeof(Test).GetProperty(name);
        if (property == null)
        {
            throw new ArgumentException("No such property!");
        }
        // More error checking here,around indexer parameters,property type,// whether it's read-only etc
        property.SetValue(this,value,null);
    }

    static void Main()
    {
        Test t = new Test();
        t.AddPropertyValue("Foo","hello");
        t.AddPropertyValue("Bar","world");

        Console.WriteLine("{0} {1}",t.Foo,t.Bar);
    }
}

如果你需要做很多事情,它在性能方面会变得非常痛苦.代表们之间的技巧可以让它快得多,但值得让它先工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读