C# ¿Cuándo finaliza y se limpia una declaración de uso?

programación


Esto no es un problema, solo una pregunta sobre la declaración de uso.
Si tengo una rutina como esta.

public static int UpdateSeries(int mazeSeriesID)
		{
			Gbl.z_MethodMain = "(Common)UpdateShows";

			using SqliteDBContext dbContext = new();

have some code which updates or creates sqlite records then executes a save changes block as follows.

}

public static bool SaveEntityChanges(string label = "")
		{
			Gbl.z_MethodMain = "(Common)SaveEntityChanges";
			bool result = true;

			try
			{
				DbContext.SaveChanges();
			} catch(Exception ex)
			{
				Utils.WriteLog(
					Gbl.z_MsgLogName,
					1,
					"Error occurred while Saving Changes to Database - Exception= " + ex.Message,
					Gbl.z_MethodMain,
					label);
				result = false;
			}
			return result;
		}

¿La instrucción de uso persiste durante la rutina de guardar cambios ejecutada?
¿Persiste sobre otras rutinas ejecutadas desde dentro del bloque?
¿El uso finalizará únicamente con una devolución?
¿Cuál es la diferencia si pongo todo el código entre llaves?

Soy nuevo en esto todo el doco no lo deja claro.

Lo que he probado:

Actualmente sólo he intentado hacer esto dentro de un bloque.

Solución 1

Solución 2

Hay dos formas diferentes de using*

El using statement que requiere paréntesis:

C#
using (MyClass mc = new MyClass())
   {
   // mc in scope here
   ...
   }
// mc no longer in scope

El sistema llamará automáticamente a Dispose para la variable cuando se salga del bloque de código de cualquier forma: caída, excepción, break, continue, throwo return.

El using declaration:

C#
   {
   ...
   using MyClass mc = new MyClass();
   // mc in scope here
   ...
   }
// mc out of scope here

La variable se eliminará cuando el código salga del ámbito en el que se declara la variable (normalmente entre llaves) de la misma manera que para el using statement.

* Bueno, tres: también está el using directive que aparece en la parte superior del archivo y crea alias.

コメント

タイトルとURLをコピーしました