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); } } 如果你需要做很多事情,它在性能方面会变得非常痛苦.代表们之间的技巧可以让它快得多,但值得让它先工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 更加 Swift 化的 Collection View 和 Table View Cells
- ajaxSubmit上传文件出现下载提示框问题
- 《swift2.0 官方教程中文版》 第2章-07闭包
- Open Flash Chart图表的JSON格式基本属性详解
- CURLOPT_WRITEFUNCTION获取xml内容
- PHP preg match正则表达式函数的操作实例
- objective-c – 什么是ObjectiveC.gcno?它应该包含在源代码
- AJAX with JSP and Servlet using Jquery Example
- 从ADF Faces JSF 1.2中的托管bean构造函数导航
- Arcgis Flex在线编辑