我正在使用Reflection通过PropertyInfo.SetValue()设置属性值;有问题的属性是一个字符串,我从中获取值的对象实际上是一个GUID。我想在这个过程中从一个GUID转换为一个字符串 - 有没有什么方法可以定义某种隐式转换来启用它?目前我收到了一个错误:
"Object of type 'System.Guid' cannot be converted to type 'System.String'."
我想我可以进行类型检查并在必要时手动转换,但如果有一种优雅的方式在幕后进行,那么这将是更可取的!
非常感谢。
修改: 我不能真正在GUID上调用.ToString()方法,因为我非常喜欢我的代码看起来像这样:
propertyInfoInstance.SetValue(classInstance, objectWithValue, null)
其中objectWithValue是int / bool / string / GUID。这适用于除GUID之外的所有内容,因为(我认为!!)可以使用隐式转换。我可以事先进行类型检查,只需将GUID转换为字符串,但我只是得到“必须有更好的方法......”的感觉。
答案 0 :(得分:3)
我不相信字符串和guid之间存在隐式转换。试试这个:
guid.ToString();
问题2:
if(propertyInfoInstance.PropertyType == typeof(string) && objectWithValue != null)
{
objectWithValue = objectWithValue.ToString();
}
propertyInfoInstance.SetValue(classInstance, objectWithValue, null);
我觉得它太乱了。
答案 1 :(得分:3)
这是我的理解(有人请纠正我,如果这是错误的),你只能为自己的对象定义隐式转换运算符。
您需要手动处理将GUID转储为字符串w / guid.ToString();
答案 2 :(得分:0)
您是否在GUID引用上尝试过.ToString()?
答案 3 :(得分:0)
你可以这样写:
object myValue = /* source the value from wherever */;
if (!(myValue is string)) myValue = myValue.ToString();
然后使用myValue调用PropertyInfo.SetValue()。