Yo solía pensar que List<T> is considered dangerous. Mi punto es que, creo que el valor predeterminado (T) no es un valor de retorno seguro. Many other people think so too considerar lo siguiente:
¿Es la Lista.Encontrar <T> considerada peligrosa? ¿Cuál es una mejor manera de hacer la lista <T>. Find (Predicado <T>)?
List<int> evens = new List<int> { 0, 2, 4, 6, , 8};
var evenGreaterThan10 = evens.Find(c=> c > 10);
// evenGreaterThan10 = 0 #WTF
predeterminado (T) para los tipos de valor es 0, por lo tanto, 0 es goona ser devuelto es el segmento de código anterior!
No me gustó esto, así que agregué un método de extensión llamado TryFind que devuelve un booleano y acepta un parámetro de salida además del predicado, algo similar al famoso método TryParse.
Editar:
Aquí es mi TryFind método de extensión:
public static bool TryFind<T>(this List<T> list, Predicate<T> predicate, out T output)
{
int index = list.FindIndex(predicate);
if (index != -1)
{
output = list[index];
return true;
}
output = default(T);
return false;
}
¿Qué es un camino a la encuentren en las listas genéricas?
Por qué no utilizar .Where (c => c> 10)? No soy un experto, pero debería funcionar ... –
@Jouke - * Where() * devuelve una lista IEnumerable, no solo el primer elemento encontrado que * Find() * hace. – slugster
Muchas gracias por señalar esto: en mi humilde opinión, es un defecto grave que hace que encuentre una solución que no se va (afortunadamente existe dónde y primero). Por otro lado Find() debería ser 100% equivalente a Where(). First(). – greenoldman