我遇到以下代码问题。我正在遍历一个集合以查看某个对象是否具有某种属性类型,如果是,则进行一些转换。
var props = obj.GetType().GetProperties();
foreach (var p in props)
{
if (p.PropertyType == typeof(System.Boolean))
{
var conv = Convert.ToByte(p);
}
}
尝试运行时出现以下错误:
"无法转换类型为' System.Reflection.RuntimePropertyInfo'的对象输入' System.IConvertible'。"
答案 0 :(得分:1)
我假设您想要获取属性的值并将 转换为一个字节,对吧?不是财产本身......所以:
var conv = Convert.ToByte(p.GetValue(obj, null));
将它作为byte
而不是bool
似乎很奇怪,不可否认......我已经预料到了:
var conv = (bool) p.GetValue(obj, null);
我个人也会使用:
if (p.PropertyType == typeof(bool))
而不是明确地拼出System.Boolean
。