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

dove main è un'entità dinamica.Convertire un oggetto in Sistema guida

Come posso convertire il numero sopra indicato da main.GetValue("") a System.Guid?

L'errore dice

Impossibile convertire implicitamente il tipo di oggetto a 'System.Guid'.

risposta

19

funziona il metodo GetValue effettivamente restituiscono un Guid tipizzato come object? Se è così, allora non vi resta che eseguire un cast esplicito in questo modo:

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

In caso contrario, fa ritorno GetValue qualcosa che può essere passato a uno dei costruttori (per esempio, un byte[] o string)? In tal caso si potrebbe fare questo:

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

Se nessuno di quanto sopra sono applicabili, allora si sta andando ad avere bisogno di fare un certo lavoro manuale per convertire tutto quello restituito dal GetValue ad un Guid.

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

'come Guid'? Quello non funzionerà. (Guid è un tipo di valore.) – dtb

+0

Si dice ancora che l'operatore as deve essere utilizzato con un tipo di riferimento o un tipo nullable (System.Guid è un tipo non annullabile) – Ashutosh

+0

@dtb È necessario averlo visto prima di essere modificato. Mi sono beccato su quello :) –

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

Sbagliato. [Guid.NewGuid] (http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx) non accetta argomenti. – dtb

+0

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

+0

Scusa, lunedì mattina. :) –

1

Un modo è utilizzare il costruttore GUID e passargli una rappresentazione di stringa del GUID. Questo funzionerà se l'oggetto è in realtà una rappresentazione stringa di GUID. Esempio:

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

Questo compila. Ma non lo definirei "infallibile". Funziona solo in una gamma molto ristretta di casi. Non lo consiglierei. – dtb

3

Se stai usando .Net 4.0, ci sono stati parsing metodi aggiunti alla struct Guid:

Guid Guid.Parse(string input) 

e

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

farà quello che vuoi.

-1

ci sono una soluzione che utilizza il tipo di 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: AVVISO: Ciò restituirà il GUID di 'typeof (main)' non un GUID univoco per ogni istanza di main, né un GUID univoco per ogni valore restituito da 'main.GetValue()'. –

Problemi correlati