C#:如何使用反射而不设置装箱或拆箱来设置具有值类型的属性?

时间:2019-07-17 10:59:57

标签: c# boxing

我处于需要使用反射对大量不同类别的DTO进行水合的情况,但是我想避免装箱和拆箱,这会损害性能。知道如何吗?

示例说明:

    public class Person {
      public int Age { get; set; }
    }
    var person = new Person();
    var ageProp = typeof(Person).GetProperty("Age");
    ageProp.SetValue(person , 13); // Causes boxing!!

编辑

这是一个更好的例子:

public void CreateAndHydrateEntity(Type entityType, List<(string PropName, int PropIndex) properties, SqlDataReader reader) {
    var entity = Activator.CreateInstance(entityType);
    foreach(var (propName, index) in properties) {
        var prop = entityType.GetProperty(propName);
        prop.SetValue(entity, reader[index]); // Causes boxing!!
    }
}

0 个答案:

没有答案