Cómo trabajar con GUID en C # 8

Cuando trabaje en aplicaciones, es posible que deba utilizar identificadores únicos globales (GUID). Los identificadores únicos como las claves primarias en una base de datos SQL aseguran que los objetos importantes como los clientes y las facturas no se dupliquen ni se sobrescriban. Sin identificadores únicos, no podríamos evitar la pérdida de datos ni garantizar la integridad de los datos de nuestras aplicaciones. 

Un identificador único global o GUID representa un número de identificación gigantesco, un número tan grande que se garantiza matemáticamente que es único no solo en un único sistema como una base de datos, sino en varios sistemas o aplicaciones distribuidas. Este artículo analiza por qué necesitamos GUID y cómo podemos trabajar con GUID en C # 8.0.

Para trabajar con los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2019 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2019 aquí. 

Crear un proyecto de aplicación de consola en Visual Studio

En primer lugar, creemos un proyecto de aplicación de consola .NET Core en Visual Studio. Suponiendo que Visual Studio 2019 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core en Visual Studio.

  1. Inicie el IDE de Visual Studio.
  2. Haga clic en "Crear nuevo proyecto".
  3. En la ventana "Crear nuevo proyecto", seleccione "Aplicación de consola (.NET Core)" en la lista de plantillas que se muestran.
  4. Haga clic en Siguiente.
  5. En la ventana "Configure su nuevo proyecto" que se muestra a continuación, especifique el nombre y la ubicación del nuevo proyecto.
  6. Haga clic en Crear.

Esto creará un nuevo proyecto de aplicación de consola .NET Core en Visual Studio 2019. Usaremos este proyecto para trabajar con GUID en las secciones siguientes de este artículo. Tenga en cuenta que usaremos C # 8 aquí, por lo que es posible que desee actualizar la versión de idioma en su proyecto.

¿Por qué necesitamos GUID?

Imagine que tiene una aplicación de punto de venta que está disponible tanto en modo en línea como fuera de línea en su aplicación móvil. Suponga que su aplicación proporciona números de identificación que se generan automáticamente a partir de 1. ¿Cómo puede fusionar los datos fuera de línea cuando se restablece la conectividad? ¿Qué pasa si sus números de identificación se han generado en ambos modos? Puede haber colisiones, ¿verdad? ¿Cómo manejaría los números de identificación duplicados? Definitivamente podría manejar esto, pero tendría que escribir mucho código, que no es lo que quiere hacer.

Aquí es donde los GUID vienen al rescate. Un GUID es un número gigantesco (de 128 bits de longitud) y es casi único. ¿Por qué casi único? ¿Por qué no podemos decir que es único? Básicamente, la cantidad de GUID posibles es tan grande que las posibilidades de colisión son mínimas. Sin embargo, las posibilidades de colisión no son nulas. 

Puede aprovechar los GUID convirtiéndolos en las claves principales para las tablas de su base de datos. El uso de GUID incluso le ayudará a evitar conflictos de fusión cuando esté fusionando dos o más bases de datos. Otra ventaja de los GUID es que puede generarlos sin conexión, no necesita estar conectado a la red o Internet.

¿Cómo se representan los GUID?

El siguiente es un ejemplo de GUID. Tenga en cuenta que un GUID suele tener una longitud de 128 bits y se representa en formato hexadecimal.

eaa24756-3fac-4e46-b4bb-074ff4f5b846

Un GUID se organiza como una secuencia bien definida de 32 dígitos hexadecimales agrupados en fragmentos de 8-4-4-4-12. Por lo tanto, puede tener un máximo de 2 ^ 128 GUID.

Cree un GUID en C # 8

En esta sección, aprenderemos cómo podemos trabajar con GUID en C #. Puede crear GUID en .NET utilizando la estructura Guid disponible como parte del espacio de nombres del sistema. Esta es la forma más sencilla de generar un GUID en C #. Escriba el siguiente código en el método Main () del archivo Program.cs en el proyecto que creó anteriormente.

Guid obj = Guid.NewGuid ();

Console.WriteLine ("El Guid recién creado es:" + obj.ToString ());

Console.ReadKey ();

Cree un GUID vacío en C # 8

Dado que Guid es una estructura, es un tipo de valor y, por lo tanto, no puede establecerlo en nulo. Para crear Guids vacíos, puede escribir el siguiente código.

ID de guía = nueva guía ();

si (id == Guid.Empty)

Console.WriteLine ("El Guid está vacío");

Un Guid.Empty tiene un valor de 00000000-0000-0000-0000-000000000000. Puede aprovechar un GUID vacío para compararlo con otro objeto GUID para determinar si no es cero. El siguiente fragmento de código ilustra esto. 

if (guid! = Guid.Empty) { 

  // El objeto GUID contiene valores distintos de cero

}

más

{

  // El objeto GUID está vacío

Aquí hay un método de extensión simple que determina si un GUID es Guid.Empty. 

public static bool IsNullOrEmpty (esta guía de Guid)

{

  return (guid == Guid.Empty);

Incluso puede verificar si su GUID anulable es nulo usando el siguiente método de extensión. 

public static bool IsNullOrEmpty (este Guid? guid)

{

  si (guid.HasValue)

    if (guid == predeterminado (Guid))

        devuelve verdadero;

    falso retorno;

}

Tenga en cuenta que el valor predeterminado (Guid) es el mismo que Guid.Empty.

Convierta un GUID en una cadena en C # 8

Incluso puede convertir un GUID en una cadena. El siguiente fragmento de código muestra cómo puede convertir un GUID vacío en una cadena.

cadena str = Guid.Empty.ToString ();

Console.WriteLine (str);

Tenga en cuenta que hay una advertencia importante para el uso de GUID: es posible que tenga colisiones. Tenga en cuenta también que los GUID ocupan algo de espacio y no se generan en orden secuencial. Sin embargo, puede hacer que sus GUID sean únicos mediante programación utilizando un entero de 128 bits que se puede representar mediante dos valores ULong e incrementándolos secuencialmente. 

Es posible que desee convertir un GUID en una cadena con frecuencia en sus aplicaciones. Es posible que deba hacer esto para vincular los datos GUID a sus controles de datos o para pasar el GUID a la interfaz de usuario. Es posible que incluso desee convertir un objeto GUID en una cadena para formatear los datos GUID según sus requisitos.

Puede crear GUID de varias formas diferentes. Estos incluyen aleatorios, basados ​​en tiempo, basados ​​en hardware y basados ​​en contenido (es decir, basados ​​en un valor hash MD5 o SHA-1 de un dato). Lo guiaré a través de todas estas formas y otras características avanzadas de los GUID en un artículo futuro aquí.

Cómo hacer más en C #

  • Cuándo usar una clase abstracta frente a una interfaz en C #
  • Cómo trabajar con AutoMapper en C #
  • Cómo usar expresiones lambda en C #
  • Cómo trabajar con delegados Action, Func y Predicate en C #
  • Cómo trabajar con delegados en C #
  • Cómo implementar un registrador simple en C #
  • Cómo trabajar con atributos en C #
  • Cómo trabajar con log4net en C #
  • Cómo implementar el patrón de diseño del repositorio en C #
  • Cómo trabajar con la reflexión en C #
  • Cómo trabajar con filesystemwatcher en C #
  • Cómo realizar la inicialización diferida en C #
  • Cómo trabajar con MSMQ en C #
  • Cómo trabajar con métodos de extensión en C #
  • Cómo usar expresiones lambda en C #
  • Cuándo usar la palabra clave volátil en C #
  • Cómo usar la palabra clave yield en C #
  • Cómo implementar polimorfismo en C #
  • Cómo construir su propio programador de tareas en C #
  • Cómo trabajar con RabbitMQ en C #
  • Cómo trabajar con una tupla en C #
  • Explorando métodos virtuales y abstractos en C #