2010-09-27 20 views
10
Guid mainfolderid = (main.GetValue("")); 

donde main es una entidad dinámica.Convierta un objeto a System Guid

¿Cómo puedo convertir el mencionado main.GetValue("") en System.Guid?

El error dice

No se puede convertir implícitamente el tipo de objeto a 'System.Guid'.

Respuesta

19

que hace el método GetValue vuelven en realidad un Guid escribe como object? Si es así, entonces sólo tiene que realizar una conversión explícita de este modo:

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

caso negativo, ¿GetValue retorno algo que se puede pasar a uno de los constructores (es decir, un byte[] o string)? En ese caso, usted puede hacer esto:

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

Si ninguno de los anteriores son aplicables entonces usted va a tener que hacer algún trabajo manual para convertir lo que se devuelve por GetValue a un Guid.

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

'como Guid'? Eso no funcionará (Guid es un tipo de valor.) – dtb

+0

Aún dice El operador as se debe usar con un tipo de referencia o tipo anulable (System.Guid es un tipo que no admite nulo) – Ashutosh

+0

@dtb Debe haber visto eso antes de editarlo. Me sorprendí con eso :) –

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

incorrecto [Guid.NewGuid] (http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx) no toma argumentos. – dtb

+0

http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx –

+0

Lo sentimos, lunes por la mañana. :) –

1

Una forma es usar el constructor GUID y pasarle una representación de cadena del GUID. Esto funcionará si el objeto es realmente una representación de cadena de GUID. Ejemplo:

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

Esto compila. Pero yo no lo llamaría "a prueba de tontos". Solo funciona en un rango muy estrecho de casos. No recomendaría – dtb

3

Si está utilizando .Net 4.0, había Analizar métodos añadidos a la estructura Guid:

Guid Guid.Parse(string input) 

y

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

hará lo que quiera.

-1

Hay una solución mediante el tipo del objet:

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() + "}"; 
} 
+1

-1: ADVERTENCIA: Esto devolverá el GUID de 'typeof (main)' no un GUID único para cada instancia de main, ni un GUID único para cada valor devuelto por 'main.GetValue()'. –