Programmering

Sådan arbejder du med GUID'er i C # 8

Når du arbejder i applikationer, kan det være nødvendigt at du bruger globalt unikke identifikatorer (GUID'er). Unikke identifikatorer som primære nøgler i en SQL-database sikrer, at vigtige objekter som kunder og fakturaer ikke duplikeres eller overskrives. Uden unikke identifikatorer kunne vi ikke forhindre datatab eller sikre dataintegriteten i vores applikationer.

En globalt unik identifikator eller GUID repræsenterer et gigantisk identifikationsnummer - et tal så stort, at det matematisk garanteres at være unikt ikke kun i et enkelt system som en database, men på tværs af flere systemer eller distribuerede applikationer. Denne artikel diskuterer, hvorfor vi har brug for GUID'er, og hvordan vi kan arbejde med GUID'er i C # 8.0.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et konsolapplikationsprojekt i Visual Studio

Lad os først oprette et .NET Core Console Application-projekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge nedenstående trin for at oprette et nyt .NET Core Console Application-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "Konsolapp (.NET Core)" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.

Dette opretter et nyt .NET Core-konsolapplikationsprojekt i Visual Studio 2019. Vi bruger dette projekt til at arbejde med GUID'er i de efterfølgende afsnit i denne artikel. Bemærk, at vi bruger C # 8 her, så det kan være en god idé at opdatere sprogversionen i dit projekt.

Hvorfor har vi brug for GUID'er?

Forestil dig, at du har en salgs-applikation, der er tilgængelig i både online og offline-tilstande på din mobilapplikation. Antag, at din applikation leverer ID-numre, der genereres automatisk fra 1. Hvordan kan du flette offline-data, når forbindelsen er gendannet? Hvad hvis dine ID-numre er genereret i begge tilstande? Der kan være kollisioner, ikke? Hvordan ville du håndtere identiske ID-numre? Du kunne helt sikkert håndtere dette, men du bliver nødt til at skrive en masse kode - hvilket ikke er, hvad du vil gøre.

Her er hvor GUID'er kommer til undsætning. En GUID er et gigantisk tal - 128 bit langt - og er næsten unikt. Hvorfor næsten unik? Hvorfor kan vi ikke sige, at det er unikt? Dybest set er antallet af mulige GUID'er så stort, at chancerne for kollision er ekstremt minimale. Ikke desto mindre er chancerne for kollision ikke nul.

Du kan drage fordel af GUID'er ved at gøre dem til de primære nøgler til dine databasetabeller. Brug af GUID'er hjælper dig endda med at undgå sammenfletningskonflikter, når du fletter to eller flere databaser. En anden fordel ved GUID'er er, at du kan generere dem offline - du behøver ikke at være forbundet til netværket eller internettet.

Hvordan er GUID'er repræsenteret?

Følgende er et eksempel på en GUID. Bemærk, at en GUID normalt er 128 bit lang og er repræsenteret i hexadecimal.

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

En GUID er organiseret som en veldefineret sekvens på 32 hexadecimale cifre grupperet i klumper af 8-4-4-4-12. Derfor kan du maksimalt have 2 ^ 128 GUID'er.

Opret en GUID i C # 8

I dette afsnit lærer vi, hvordan vi kan arbejde med GUID'er i C #. Du kan oprette GUID'er i .NET ved hjælp af Guid-strukturen, der er tilgængelig som en del af systemnavneområdet. Her er den nemmeste måde at generere en GUID på i C #. Skriv følgende kode i Main () -metoden i Program.cs-filen i det projekt, du oprettede tidligere.

Guid obj = Guid.NewGuid ();

Console.WriteLine ("Den nyoprettede vejledning er:" + obj.ToString ());

Console.ReadKey ();

Opret en tom GUID i C # 8

Da Guid er en struktur, er den en værditype, og derfor kan du ikke indstille den til null. For at oprette tomme guider kan du skrive følgende kode.

Guid id = ny Guid ();

hvis (id == Guid.Empty)

Console.WriteLine ("Guiden er tom");

En vejledning.Tom har en værdi på 00000000-0000-0000-0000-000000000000. Du kan drage fordel af en tom GUID til at sammenligne den med et andet GUID-objekt for at afgøre, om det ikke er nul. Følgende kodestykke illustrerer dette.

hvis (guid! = Guid.Empty) {

// GUID-objektet indeholder værdier, der ikke er nul

}

andet

{

// GUID-objektet er tomt

Her er en simpel udvidelsesmetode, der bestemmer, om en GUID er Guid.Empty.

offentlig statisk bool IsNullOrEmpty (denne vejledning)

{

retur (guid == Guid.Empty);

Du kan endda kontrollere, om din nullable GUID er null ved hjælp af følgende udvidelsesmetode.

offentlig statisk bool IsNullOrEmpty (denne vejledning? guid)

{

hvis (guid.HasValue)

hvis (guid == standard (Guid))

returner sandt;

returner falsk;

}

Bemærk, at standard (Guid) er den samme som Guid.Empty.

Konverter en GUID til en streng i C # 8

Du kan endda konvertere en GUID til en streng. Følgende kodestykke viser, hvordan du kan konvertere en tom GUID til en streng.

streng str = Guid.Empty.ToString ();

Console.WriteLine (str);

Bemærk, at der er et stort forbehold for brug af GUID'er: Du kan have kollisioner. Bemærk også, at GUID'er optager noget plads, og de genereres ikke i rækkefølge. Du kan dog gøre dine GUID'er unikke programmatisk ved at bruge et 128-bit heltal, der kan repræsenteres ved hjælp af to ULong-værdier og inkrementere det sekventielt.

Det kan være en god idé at konvertere en GUID til en streng ofte i dine applikationer. Du skal muligvis gøre dette for at binde GUID-data til dine datakontroller eller for at videregive GUID'en til brugergrænsefladen. Du vil måske endda konvertere et GUID-objekt til en streng for at formatere GUID-data i henhold til dine krav.

Du kan oprette GUID'er på flere forskellige måder. Disse inkluderer tilfældige, tidsbaserede, hardwarebaserede og indholdsbaserede (dvs. baseret på en MD5- eller SHA-1-hashværdi for et stykke data). Jeg vil lede dig gennem alle disse måder og andre avancerede funktioner i GUID'er i en fremtidig artikel her.

Sådan gør du mere i C #

  • Hvornår skal man bruge en abstrakt klasse vs. interface i C #
  • Sådan arbejder du med AutoMapper i C #
  • Sådan bruges lambda-udtryk i C #
  • Sådan arbejder du med Action-, Func- og Predicate-delegerede i C #
  • Sådan arbejder du med delegerede i C #
  • Sådan implementeres en simpel logger i C #
  • Sådan arbejder du med attributter i C #
  • Sådan arbejder du med log4net i C #
  • Sådan implementeres depotdesignmønsteret i C #
  • Sådan arbejder du med refleksion i C #
  • Sådan arbejder du med filsystemwatcher i C #
  • Sådan udføres doven initialisering i C #
  • Sådan arbejder du med MSMQ i C #
  • Sådan arbejder du med udvidelsesmetoder i C #
  • Hvordan vi lambda-udtryk i C #
  • Hvornår skal du bruge det flygtige nøgleord i C #
  • Sådan bruges afkastnøgleordet i C #
  • Sådan implementeres polymorfisme i C #
  • Sådan bygger du din egen opgaveplanlægning i C #
  • Sådan arbejder du med RabbitMQ i C #
  • Sådan arbejder du med en tuple i C #
  • Udforskning af virtuelle og abstrakte metoder i C #