Преобразование GUID в строку с помощью отражения

Я использую Reflection для установки значения свойства через PropertyInfo.SetValue(); Рассматриваемое свойство представляет собой строку, а объект, из которого я получаю значение, на самом деле является идентификатором GUID. Я хотел бы преобразовать GUID в строку в процессе - есть ли способ определить какое-то неявное приведение, которое позволит это сделать? На данный момент я получаю сообщение об ошибке:

"Object of type 'System.Guid' cannot be converted to type 'System.String'."

Я думаю, я мог бы сделать проверку типов и вручную преобразовать, если это необходимо, но если есть элегантный способ сделать это за кулисами, то это было бы предпочтительнее!

Большое спасибо.


Редактировать: я не могу просто вызвать метод .ToString() для GUID, поскольку мне бы очень хотелось, чтобы мой код выглядел так:

propertyInfoInstance.SetValue(classInstance, objectWithValue, null)  

где objectWithValue — это int/bool/string/GUID. Это отлично работает для всего, кроме GUID, поскольку (я думаю!!) доступно неявное приведение. Я мог бы заранее проверить тип и просто преобразовать GUID в строку, но у меня просто возникает ощущение «Должен быть лучший способ...».


person Jon Artus    schedule 18.06.2009    source источник


Ответы (4)


Насколько я понимаю (кто-нибудь, пожалуйста, поправьте меня, если это неправильно), вы можете определять неявные операторы приведения только для своих собственных объектов.

Вам нужно будет вручную обрабатывать дамп GUID в строку с guid.ToString();

person Yoopergeek    schedule 18.06.2009
comment
К сожалению, я думаю, что это правильно. Похоже, ключ в том, что в этом случае невозможно определить неявное приведение по указанным вами причинам, поэтому мне придется обрабатывать этот случай вручную - тривиальный код, но беспорядочный ! - person Jon Artus; 19.06.2009

Я не верю, что существует неявное приведение между строкой и guid. Попробуй это:

guid.ToString();

На вопрос 2:

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

Я не думаю, что это слишком грязно.

person Jake Pearson    schedule 18.06.2009
comment
+1 Это правильно. Между строкой и guid не существует неявного преобразования. - person Adam McKee; 18.06.2009

Вы пробовали .ToString() в ссылке GUID?

person Eric Schneider    schedule 18.06.2009

Вы можете написать что-то вроде этого:

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

Затем вызовите PropertyInfo.SetValue() с myValue.

person Jon Grant    schedule 18.06.2009