2011-03-31 16 views

Respuesta

20

Use el operador ??:

public static class Extension 
{ 
    public static Guid ToGuid(this Guid? source) 
    { 
     return source ?? Guid.Empty; 
    } 

    // more general implementation 
    public static T ValueOrDefault<T>(this Nullable<T> source) where T : struct 
    { 
     return source ?? default(T); 
    } 
} 

usted puede hacer esto:

Guid? x = null; 
var g1 = x.ToGuid(); // same as var g1 = x ?? Guid.Empty; 
var g2 = x.ValueOrDefault(); // use more general approach 

Si usted tiene una lista de AA y wa no para filtrar los nulos se puede escribir:

var list = new Guid?[] { 
    Guid.NewGuid(), 
    null, 
    Guid.NewGuid() 
}; 

var result = list 
      .Where(x => x.HasValue) // comment this line if you want the nulls in the result 
      .Select(x => x.ValueOrDefault()) 
      .ToList(); 

Console.WriteLine(string.Join(", ", result)); 
+1

eso es para respuestas válidas pero mi intención es convertir una lista de Guid con nulos a la lista de guid. ¿Cómo puedo hacer eso? –

5

la propiedad Nullable<T>.value?

+0

Muchas gracias ryuslash, su respuesta realmente me ha ayudado. – Mitch

+0

Estoy de acuerdo; no es necesario extender el tipo; si sabe que el tipo que admite nulos contiene un Guid real, solo use la propiedad .Value. – HBlackorby

9

Utilice esta:

List<Guid?> listOfNullableGuids = ... 
List<Guid> result = listOfNullableGuids.Select(g => g ?? Guid.Empty).ToList(); 

Ésta es la forma más sencilla. No es necesario un método de extensión para algo tan simple ...