Qual è il controllo a destra:Confronta con predefinito o vuoto?
Guid value;
// ...
if (value != Guid.Empty)
o
if (value != default(Guid))
penso che il secondo, ma non può spiegare perché.
Qual è il controllo a destra:Confronta con predefinito o vuoto?
Guid value;
// ...
if (value != Guid.Empty)
o
if (value != default(Guid))
penso che il secondo, ma non può spiegare perché.
Dal Guid.Empty == default(Guid)
non ha molta importanza, ma preferisco lo Guid.Empty
per la leggibilità.
Direi che entrambi vanno bene dal punto di vista della leggibilità, in realtà si tratta di ciò che significa effettivamente il controllo. Controllare se il record è in uno stato predefinito è diverso da controllare se contiene un valore vuoto (IMO). – James
direi la seconda semplicemente perché si ha il record in uno stato non inizializzato , quindi, conterrà il valore di default . Stai verificando se la variabile è in uno stato predefinito, non se è vuota - 2 diversi assegni (IMO).
Guid.Empty
è l'equivalente di default(Guid)
in .NET in modo da un punto di vista tecnico non importa, però, il confronto a Guid.Empty
mi dà l'impressione che il vostro controllo per un valore particolare, non se il record è in una stato di default
Guid.Empty
è equivalente a new Guid()
, che è anche equivalente a default(Guid)
.
Quando si decompila la struttura Guid
, sembra;
public static readonly Guid Empty = new Guid();
Da Guid
è un struct
, da Default Values Table;
Il valore prodotto dall'impostazione di tutti i campi di tipo valore sui valori predefiniti e tutti i campi di tipo di riferimento su null.
Dal tipi di campi di Guid
sono, short
, int
, byte
, (e questo valore predefinito tipi è 0
), quando usiamo default(Guid)
otteniamo una Guid
con tutti i campi sono 0
.
Un esempio della struttura Guid cui valore è tutti zeri sola lettura.
Quando scriviamo questo codice;
Console.WriteLine(default(Guid));
Console.WriteLine(new Guid());
uscite;
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
Se vi preoccupate per la leggibilità (che credo si dovrebbe) Guid.Empty
sembra meglio per me.
Questa è la spiegazione più inutile che abbia mai fatto ':' –
Entrambi sono uguali!
Guid.Empty
è un campo di sola lettura di Guid, con il valore {00000000-0000-0000-0000-000000000000}
.
Con default(Guid)
la compilazione crea un valore costante, con {00000000-0000-0000-0000-000000000000}
.
In entrambi i casi il valore viene confrontato con un altro valore da qualche parte in memoria.
Utilizzare Guid.Empty
per la leggibilità.
Utilizzare default(T)
quando si lavora con generici.
Personalmente userei Guid.Empty
per la leggibilità. L'unica volta che uso veramente lo default
in questo modo è quando non ci sono altre opzioni, ad esempio quando si controlla un KeyValuePair
.
si dovrebbe utilizzare il seguente:
var guidIsEmpty = value == Guid.Empty;
Entrambi sono tecnicamente corretto, tuttavia, il confronto a Guid.Empty rende sicuramente per il codice più leggibile.
So che questo è un vecchio thread, ma volevo solo carillon in:
Quando si definisce un valore predefinito per un GUID come un parametro a un metodo, si dovrà utilizzare di default (GUID) anziché Guid . Impuro, poiché Guid.Empty non è considerato una costante in fase di compilazione.
Questo compilerà:
private void MyMethod(Guid id = default(Guid))
Questo non compilerà:
private void MyMethod(Guid id = Guid.Empty)
Grazie a @Mekuri, ma questo non risponde direttamente alla domanda. Il tuo post è ottimo come un commento, ma non contiene abbastanza informazioni per essere una risposta in termini di SO. –
Beh ... che cosa stai cercando di verificare la presenza? – Oded
secondo esempio si dà 'L'uso della variabile locale non assegnata 'value'' – Default
' default (Guid) == Guid.Empty' – Oded