¿Cómo se prueba un diccionario genérico de objetos para ver si está vacío? Quiero ejecutar el código de la siguiente manera:

while (reportGraphs.MoveNext())
{
    reportGraph = (ReportGraph)reportGraphs.Current.Value;
    report.ContainsGraphs = true;
    break;
}

La reportGraph objeto de tipo System.Las colecciones.Genérica.Diccionario
Cuando se ejecuta este código, a continuación, el reportGraphs diccionario está vacía y MoveNext() inmediatamente lanza una excepción NullReferenceException. No quiero poner un try-catch alrededor de la cuadra si hay un más eficiente manejo de la colección vacía.

Gracias.

Está usted seguro de reportGraphs en sí no es null?
System.Collections.Generic.Dictionary no tenía una MoveNext() método. Está usted seguro de que no está pensando en un iterador a través de un Diccionario?
Lo siento mucho, reportGraphs es en realidad define como el .Enumerador, como en reportGraphs = nuevo Sistema.Las colecciones.Genérica.Diccionario<cadena, ReportGraph>.Enumerador (a); por Lo tanto, cualquier forma de detectar que MoveNext (), se produce una excepción cuando se aplica a la Enumerador. Si trato de cheques nulos puedo obtener Operador ‘!=’ no se puede aplicar a los operandos de tipo ‘System.Collections.Generic.Dictionary<string,Highpersoft.BusinessModel.ReportGraph>.Enumerator’ y ‘<null>’

OriginalEl autor DEH | 2010-01-18

3 Comentarios

  1. 20

    Si se trata de un diccionario genérico, usted puede comprobar De diccionario.Contar. El recuento será 0 si es vacío.

    Sin embargo, en su caso, reportGraphs parece que es un IEnumerator<T> – hay una razón por la que su enumeración de su colección en la mano?

    Estás en lo correcto – de hecho, es un enumerador – lo siento. No hay ninguna razón de peso, es sólo la forma en que el modelo de objetos dentro de la aplicación ha sido estructurado de cambio requeriría un poco de trabajo…
    Es generalmente un enfoque mucho mejor para no trabajar con IEnumerator directamente usar un bucle foreach en su lugar, como se suele evitar este escenario exacto…

    OriginalEl autor Reed Copsey

  2. 6

    Hay una diferencia entre un empty diccionario y null. Llamar MoveNext en una colección vacía no resultará en un NullReferenceException. Supongo que en tu caso podrías probar si reportGraphs != null.

    reportGraphs se parece más a un enumerador de un diccionario, aunque. ¿Por qué un diccionario de devolver un null enumerador? Sólo me preguntaba…
    buen punto. Debe ser un IEnumerable<T>.
    Pero Dictionary<K,V> implementa IEnumerable<KeyValuePair<K,V>>, ¿no? Creo que esto es donde la Value propiedad viene.
    Sí, lo siento gente, de hecho es un enumerador.

    OriginalEl autor Darin Dimitrov

  3. 4

    Como Darin dijo, reportGraphs es null si se lanza una NullReferenceException. La mejor manera sería la de asegurarse de que nunca es nulo (es decir, asegurarse de que se inicializa en su clase’ constructor).

    Otra manera de hacer esto (para evitar enumerar explícitamente) sería el uso de un foreach declaración:

    foreach (KeyValuePair<Key,Value> item in reportGraphs)
    {
        //do something
    }

    [Editar] Observe que en este ejemplo también presume de que reportGraphs nunca es null.

    Esto arrojará NullReferenceException si reportGraphs es nulo.
    Correcto, la mejor manera sería la de asegurarse de que nunca es null.

    OriginalEl autor Groo

Dejar respuesta

Please enter your comment!
Please enter your name here