c# - 用反射“类型转换”

标签 c# reflection casting

考虑以下示例代码:

class SampleClass
{
    public long SomeProperty { get; set; }
}

public void SetValue(SampleClass instance, decimal value)
{
    // value is of type decimal, but is in reality a natural number => cast
    instance.SomeProperty = (long)value;
}

现在我需要通过反射做一些类似的事情:

void SetValue(PropertyInfo info, object instance, object value)
{
    // throws System.ArgumentException: Decimal can not be converted to Int64
    info.SetValue(instance, value)  
}

请注意,我不能假设 PropertyInfo 总是表示长整型,该值也不总是小数。但是,我知道可以将该值转换为该属性的正确类型。

如何通过反射将'value'参数转换为PropertyInfo实例表示的类型?

最佳答案

void SetValue(PropertyInfo info, object instance, object value)
{
    info.SetValue(instance, Convert.ChangeType(value, info.PropertyType));
}

关于c# - 用反射“类型转换”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1398796/

相关文章:

c# - 我可以在单元测试中写入控制台吗?如果是,为什么控制台窗口不打开?

c# - 如何在 C# 中将 Xml 转换为 Json,反之亦然

C# 字符串格式

c++ - 在 Android 下删除 C++ 代码中的 C 样式转换

c# - 比较 LINQ 和 C# 中的日期

php - 在忽略参数类型提示的同时调用 PHP 方法

java - 如何获取在类中声明为映射的常量

c# - 将 Generic<Derived> 转换为 Generic<Base>

ios - 无法将数据转换为字典

java - 我需要防止使用反射从父类(super class)获取私有(private) Properties 字段。如何使用 Java 安全管理器来执行此操作