Domanda

Spesso devo convertire un valore recuperato (di solito come una stringa) e poi convertirlo in un int. Ma in C # (.Net) devi scegliere int16, int32 o int64 - come fai a sapere quale scegliere quando non sai quanto sarà grande il tuo numero recuperato?

È stato utile?

Soluzione

Tutti qui che hanno menzionato che la dichiarazione di un RAM Int16 salva una ram dovrebbe ottenere un downvote.

La risposta alla tua domanda è usare la parola chiave "quot" int " (o se ne hai voglia, usa " Int32 ").

Questo ti offre un intervallo fino a 2,4 miliardi di numeri ... Inoltre, i processori a 32 bit gestiranno meglio questi ints ... anche (e IL MOTIVO PIÙ IMPORTANTE ) è che se hai intenzione di usando quell'int per quasi tutti i motivi ... probabilmente sarà necessario essere un "int" (Int32).

Nel framework .Net, il 99,999% dei campi numerici (che sono numeri interi) sono "ints". (Int32).

Esempio: Array.Length, Process.ID, Windows.Width, Button.Height, ecc, ecc, ecc 1 milione di volte.

EDIT: mi rendo conto che la mia scontrosità mi farà votare in basso ... ma questa è la risposta giusta.

Altri suggerimenti

Volevo solo aggiungere che ... Mi sono ricordato che ai tempi di .NET 1.1 il compilatore era ottimizzato in modo tale che le operazioni 'int' fossero effettivamente più veloci di byte o operazioni brevi.

Credo che valga ancora oggi, ma sto facendo alcuni test ora.


EDIT: ho una scoperta a sorpresa: le operazioni di aggiunta, sottrazione e moltiplicazione per short (s) effettivamente restituiscono int!

Provare ripetutamente TryParse () non ha senso, hai già dichiarato un campo. Non puoi cambiare idea se non crei quel campo di tipo Oggetto. Non è una buona idea.

Qualunque dato il campo rappresenti ha un significato fisico. È un'età, una dimensione, un conteggio, ecc. Le quantità fisiche hanno limiti realistici sulla loro portata. Scegli il tipo int che può memorizzare quell'intervallo. Non tentare di correggere un overflow, sarebbe un bug.

Contrariamente all'attuale risposta più popolare, numeri interi più brevi (come Int16 e SByte) spesso occupano meno spazio in memoria rispetto a numeri più grandi (come Int32 e Int64). Puoi verificarlo facilmente istanziando grandi array di sbyte / short / int / long e usando perfmon per misurare le dimensioni dell'heap gestito. È vero che molti tipi di CLR amplieranno questi numeri interi per ottimizzazioni specifiche della CPU quando eseguono operazioni aritmetiche su di essi e simili, ma se archiviati come parte di un oggetto, occupano solo la quantità di memoria necessaria.

Quindi, dovresti assolutamente prendere in considerazione le dimensioni, specialmente se lavorerai con un grande elenco di numeri interi (o con un grande elenco di oggetti che contengono campi interi). Dovresti anche considerare cose come la conformità CLS (che non ammette numeri interi non firmati nei membri pubblici).

Per casi semplici come la conversione di una stringa in un numero intero, sono d'accordo che un Int32 (C # int) di solito ha più senso ed è probabilmente quello che gli altri programmatori si aspetteranno.

Se stiamo solo parlando di un paio di numeri, scegliere il più grande non farà una differenza evidente nell'uso complessivo della ram e funzionerà. Se stai parlando di molti numeri, dovrai usare TryParse () su di essi e capire il tipo int più piccolo, per salvare ram.

Tutti i computer sono finiti. Devi definire un limite superiore in base a ciò che pensi saranno i requisiti dei tuoi utenti.

Se non hai davvero un limite superiore e vuoi consentire valori 'illimitati', prova ad aggiungere le librerie di runtime Java .Net al tuo progetto, che ti permetteranno di usare la classe java.math.BigInteger - che fa quasi matematica -intero di dimensione illimitata.

Nota: le librerie Java .Net sono dotate di DevStudio completo, ma non credo che vengano fornite con Express.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top