对于.NET Framework提供的某些类型,我们可以通过字典的方式给类对象中的属性赋值。下面是实现过程的完整攻略:
1. 引入命名空间
在使用字典给类赋值时,我们需要引入System.Reflection
命名空间。在代码中添加以下语句即可:
using System.Reflection;
2. 创建类对象
首先,我们需要创建类的对象,以便我们可以给类的属性赋值。例如,我们有以下类定义:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
那么我们可以通过以下方式来创建Person类的对象:
var person = new Person();
3. 通过字典给类属性赋值
接下来我们需要创建一个字典,其中的键对应类的属性名称,值为我们要为该属性赋的值。例如,我们要为上文中示例的person对象的Name属性和Age属性分别赋值,我们可以这样创建字典:
var dict = new Dictionary<string, object>();
dict.Add("Name", "Tom");
dict.Add("Age", 25);
完成字典的创建之后,我们就可以使用反射来为person对象赋值。代码如下:
foreach (KeyValuePair<string, object> kvp in dict)
{
PropertyInfo prop = person.GetType().GetProperty(kvp.Key);
if(prop != null && prop.CanWrite)
{
prop.SetValue(person, kvp.Value, null);
}
}
在上述代码中,Person.GetType()
是获取Person类的Type
,GetProperty(kvp.Key)
是获取属性kvp.Key的PropertyInfo
,如果属性是可写的,我们就使用prop.SetValue(person, kvp.Value, null)
为属性赋值。
示例一:给类的公共属性赋值
下面的示例将演示如何使用上述代码为类的公共属性赋值。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
var person = new Person();
var dict = new Dictionary<string, object>();
dict.Add("Name", "Tom");
dict.Add("Age", 25);
foreach (KeyValuePair<string, object> kvp in dict)
{
PropertyInfo prop = person.GetType().GetProperty(kvp.Key);
if(prop != null && prop.CanWrite)
{
prop.SetValue(person, kvp.Value, null);
}
}
// 验证赋值是否成功
Console.WriteLine("Name: {0}", person.Name);
Console.WriteLine("Age: {0}", person.Age);
输出结果为:
Name: Tom
Age: 25
示例二:给类的私有属性赋值
下面的示例将演示如何使用上述代码为类的私有属性赋值。
public class Person
{
public string Name { get; set; }
private int Age { get; set; }
}
var person = new Person();
var dict = new Dictionary<string, object>();
dict.Add("Name", "Tom");
dict.Add("Age", 25);
foreach (KeyValuePair<string, object> kvp in dict)
{
PropertyInfo prop = person.GetType().GetProperty(kvp.Key, BindingFlags.Instance | BindingFlags.NonPublic);
if(prop != null && prop.CanWrite)
{
prop.SetValue(person, kvp.Value, null);
}
}
// 验证赋值是否成功
Console.WriteLine("Name: {0}", person.Name);
Console.WriteLine("Age: {0}", person.GetType().GetProperty("Age", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(person));
输出结果为:
Name: Tom
Age: 25
注意,获取私有属性的代码中需要添加BindingFlags.Instance | BindingFlags.NonPublic
这两个属性。而在获取公共属性的代码中不需要添加。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET通过字典给类赋值实现代码 - Python技术站