asp.net MVC sistema de gestión de dormitorios (código fuente + base de datos)

Código fuente del sistema de gestión de dormitorios de proyectos ASP.NET para que todos puedan aprender y comunicarse

Archivo: n459.com/file/25127180-478966639

Los siguientes son irrelevantes:

-------------------------------------------Línea divisoria----- ----------------------------------------

Habiendo estado en la industria durante muchos años, no he clasificado sistemáticamente a este par de Li Kui y Li Gui.

Recientemente, me sorprendió la razón por la que Dios dijo: "Realmente, LRU es lo mismo". El esquema 1 usa una matriz para implementar LUR. El algoritmo escrito a mano involucra este par de interfaces. Aprovecho esta oportunidad para cubrir este par de enemigos difíciles.

IEnumerator
Las interfaces IEnumerator e IEnumerable tienen nombres similares. Estas dos interfaces generalmente se usan juntas y tienen propósitos diferentes.

La interfaz IEnumerator proporciona una función iterativa para la colección dentro de la clase. IEnumerator requiere que implementes tres métodos:

Método MoveNext: este método agrega 1 al índice de la colección y devuelve un valor bool que indica si se ha llegado al final de la colección.
Método de restablecimiento: restablece el índice de la colección a su valor inicial -1, lo que invalida el enumerador.
Método actual: devuelve el objeto actual de la posición
IEnumerable
La interfaz IEnumerable proporciona soporte para cada iteración. IEnumerable requiere que implemente el método GetEnumerator.

public IEnumerator GetEnumerator ()
{ return (IEnumerator) this; } ¿Qué interfaz debo usar? Basándose únicamente en la retórica anterior, es difícil distinguir los escenarios de uso de las dos interfaces.



La interfaz IEnumerator proporciona iteración sobre objetos de tipo colección en una clase,

La interfaz IEnumerable permite la enumeración mediante un bucle foreach.

Sin embargo, el método GetEnumerator de la interfaz IEnumerable devuelve una interfaz IEnumerator. Para implementar IEnumerable, también debe implementar IEnumerator. Si no implementa IEnumerator, no puede convertir el valor de retorno del método GetEnumerator de IEnumerable a la interfaz IEnumerator.

De la raíz inglesa: la
interfaz IEnumerator representa un enumerador, que define el método de enumeración; la
interfaz IEnumerable representa que el objeto tiene la propiedad de estar enumerado.

En resumen, el uso de IEnumerable requiere que la clase implemente IEnumerator. Si desea brindar soporte para foreach, implemente estas dos interfaces.

Práctica recomendada
Implemente IEnumerator en clases anidadas para que pueda crear varios enumeradores.
Proporcionar manejo de excepciones para el método Current de IEnumerator.
¿Por qué quieres hacer esto?
Si el contenido de la colección cambia, se llamará al método de reinicio e inmediatamente después de que el enumerador actual no sea válido, recibirá una excepción IndexOutOfRangeException (otras circunstancias también pueden causar esta excepción). Así que ejecute un bloque Try ... Catch para detectar esta excepción y lanzar una excepción InvalidOperationException, lo que indica que no se permite modificar el contenido de la colección durante la iteración.
Esta es la razón por la que a menudo informamos InvalidOperationException cuando intentamos modificar el objeto de iteración en foreach.

Tome la lista de automóviles como ejemplo para implementar la interfaz IEnumerator IEnumerable

usando el sistema;
usando System.Collections;
espacio de nombres ConsoleEnum
{ carros de clase pública: IEnumerable { carlist privado [] carlist;


    //Create internal array in constructor.
    public cars()
    {
        carlist= new car[6]
        {
            new car("Ford",1992),
            new car("Fiat",1988),
            new car("Buick",1932),
            new car("Ford",1932),
            new car("Dodge",1999),
            new car("Honda",1977)
        };
    }
    //private enumerator class
    private class  MyEnumerator:IEnumerator
    {
        public car[] carlist;
        int position = -1;

        //constructor
        public MyEnumerator(car[] list)
        {
            carlist=list;
        }
        private IEnumerator getEnumerator()
        {
            return (IEnumerator)this;
        }
        //IEnumerator
        public bool MoveNext()
        {
            position++;
            return (position < carlist.Length);
        }
        //IEnumerator
        public void Reset()
        {
            position = -1;
        }
        //IEnumerator
        public object Current
        {
            get
            {
                try
                {
                    return carlist[position];
                }
                catch (IndexOutOfRangeException)
                {
                    throw new InvalidOperationException();
                }
            }
        }
    }  //end nested class
  public IEnumerator GetEnumerator()
  {
      return new MyEnumerator(carlist);
  }
}

}
Cuando veas cada coche, puedes ver claramente

Azúcar sintáctico de Foreach Cuando se pone en contacto por primera vez con los coches, en realidad ingresará el método GetEnumerator () implementado por los autos.
Cada iteración de foreach ingresará el acceso get de la propiedad Current.

Supongo que te gusta

Origin blog.csdn.net/gumenghua_com1/article/details/112560525
Recomendado
Clasificación