通过反射将GUID转换为String

时间:2009-06-18 15:11:16

标签: c# reflection properties

我正在使用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转换为字符串,但我只是得到“必须有更好的方法......”的感觉。

4 个答案:

答案 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()。