Преобразование объекта в System Guid

Guid mainfolderid = (main.GetValue(""));

где main - динамический объект.

Как я могу преобразовать вышеупомянутый main.GetValue("") в System.Guid?

Ошибка говорит

Невозможно неявно преобразовать объект типа в 'System.Guid'.

Ответ 1

Действительно ли метод GetValue возвращает Guid, введенный как object? Если это так, то вам просто нужно выполнить явное приведение, например:

Guid mainfolderid = (Guid)main.GetValue("");

Если нет, возвращает GetValue то, что может быть передано одному из конструкторов (т.е. a byte[] или string)? В этом случае вы можете сделать это:

Guid mainfolderid = new Guid(main.GetValue(""));

Если ни одно из указанных выше не применимо, вам понадобится выполнить ручную работу, чтобы преобразовать все, что было возвращено GetValue, в Guid.

Ответ 2

Guid mainfolderid = new Guid(main.GetValue("").ToString());

Ответ 3

Если вы используете .Net 4.0, в структуру Guid были добавлены методы Parsing:

Guid Guid.Parse(string input)

и

bool Guid.TryParse(string input, out Guid result)

сделает то, что вы хотите.

Ответ 4

Один из способов - использовать конструктор GUID и передать ему строковое представление GUID. Это будет работать, если объект действительно представляет собой строковое представление GUID. Пример:

Guid mainfolderid = new Guid(main.GetValue("").ToString());

Ответ 5

Guid mainfolderid = (Guid)(main.GetValue(""));

Ответ 7

Существует решение, использующее тип объекта:

GuidAttribute   guidAttr;
object[]        arrAttrs;
Type            type;
string          strGuid;

type = main.GetType();
arrAttrs = type.Assembly.GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), false);
guidAttr = (arrAttrs != null && arrAttrs.Length > 0) ? arrAttrs[0] as GuidAttribute: null;
if (guidAttr != null) {
    strGuid = "{" + guidAttr.Value.ToUpper() + "}";
}