【问题标题】:Converting GUID to String via Reflection通过反射将 GUID 转换为字符串
【发布时间】:2009-06-18 15:11:15
【问题描述】:

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

【问题讨论】:

    标签: c# reflection properties


    【解决方案1】:

    我的理解是(如果有错误,请有人纠正我)您只能为自己的对象定义隐式转换运算符。

    您需要手动处理将 GUID 转储到带有 guid.ToString(); 的字符串

    【讨论】:

    • 不幸的是,我认为这是正确的。关键似乎是由于您给出的原因,在这种情况下无法定义隐式转换,所以我将不得不处理这个手动案例 - 琐碎的代码,但很乱!
    【解决方案2】:

    我不相信字符串和 guid 之间存在隐式转换。试试这个:

    guid.ToString();
    

    对于问题 2:

    if(propertyInfoInstance.PropertyType == typeof(string) && objectWithValue != null)
    {
        objectWithValue = objectWithValue.ToString();
    }
    propertyInfoInstance.SetValue(classInstance, objectWithValue, null);
    

    我觉得不会太乱。

    【讨论】:

    • +1 这是正确的。 string 和 guid 之间没有隐式转换。
    【解决方案3】:

    您是否在 GUID 引用上尝试过 .ToString()?

    【讨论】:

      【解决方案4】:

      你可以这样写:

      object myValue = /* source the value from wherever */;
      if (!(myValue is string)) myValue = myValue.ToString();
      

      然后用 myValue 调用 PropertyInfo.SetValue()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多