Преобразование GUID в строку через отражение - PullRequest
0 голосов
/ 18 июня 2009

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

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

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

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


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

propertyInfoInstance.SetValue(classInstance, objectWithValue, null)  

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

Ответы [ 4 ]

3 голосов
/ 18 июня 2009

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

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

3 голосов
/ 18 июня 2009

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

guid.ToString();

На вопрос 2:

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

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

0 голосов
/ 18 июня 2009

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

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

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

0 голосов
/ 18 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...