Szukaj…


Niezmienny typ odniesienia - ciąg znaków

// assign string from a string literal
string s = "hello";

// assign string from an array of characters
char[] chars = new char[] { 'h', 'e', 'l', 'l', 'o' };
string s = new string(chars, 0, chars.Length);

// assign string from a char pointer, derived from a string
string s;
unsafe
{
    fixed (char* charPointer = "hello")
    {
        s = new string(charPointer);
    }
}

Typ wartości - char

// single character s
char c = 's';

// character s: casted from integer value
char c = (char)115;

// unicode character: single character s
char c = '\u0073';

// unicode character: smiley face
char c = '\u263a';

Typ wartości - krótka, całkowita, długa (podpisane 16-bitowe, 32-bitowe, 64-bitowe liczby całkowite)

// assigning a signed short to its minimum value
short s = -32768;

// assigning a signed short to its maximum value
short s = 32767;

// assigning a signed int to its minimum value
int i = -2147483648;

// assigning a signed int to its maximum value
int i = 2147483647;

// assigning a signed long to its minimum value (note the long postfix)
long l = -9223372036854775808L;

// assigning a signed long to its maximum value (note the long postfix)
long l = 9223372036854775807L;

Możliwe jest również ustawienie tych typów na wartości zerowe, co oznacza, że oprócz zwykłych wartości można także przypisać wartość null. Jeśli zmienna typu dopuszczającego wartości zerowe nie zostanie zainicjowana, będzie miała wartość NULL zamiast 0. Typy dopuszczające wartości zerowe są oznaczane przez dodanie znaku zapytania (?) Po typie.

int a; //This is now 0.
int? b; //This is now null.

Typ wartości - ushort, uint, ulong (bez znaku 16-bitowe, 32-bitowe, 64-bitowe liczby całkowite)

// assigning an unsigned short to its minimum value
ushort s = 0;

// assigning an unsigned short to its maximum value
ushort s = 65535;

// assigning an unsigned int to its minimum value
uint i = 0;

// assigning an unsigned int to its maximum value
uint i = 4294967295;

// assigning an unsigned long to its minimum value (note the unsigned long postfix)
ulong l = 0UL;

// assigning an unsigned long to its maximum value (note the unsigned long postfix)
ulong l = 18446744073709551615UL;

Możliwe jest również ustawienie tych typów na wartości zerowe, co oznacza, że oprócz zwykłych wartości można także przypisać wartość null. Jeśli zmienna typu dopuszczającego wartości zerowe nie zostanie zainicjowana, będzie miała wartość NULL zamiast 0. Typy dopuszczające wartości zerowe są oznaczane przez dodanie znaku zapytania (?) Po typie.

uint a; //This is now 0.
uint? b; //This is now null.

Typ wartości - bool

// default value of boolean is false
bool b;
//default value of nullable boolean is null
bool? z;
b = true;
if(b) {
    Console.WriteLine("Boolean has true value");
}

Słowo kluczowe bool jest aliasem System.Boolean. Służy do deklarowania zmiennych do przechowywania wartości logicznych, true i false .

Porównania z pudełkowymi typami wartości

Jeśli typy wartości są przypisane do zmiennych typu object , są one umieszczane w ramkach - wartość jest przechowywana w instancji obiektu System.Object . Może to prowadzić do niezamierzonych konsekwencji przy porównywaniu wartości z == , np .:

object left = (int)1;  // int in an object box
object right = (int)1; // int in an object box

var comparison1 = left == right;      // false

Można tego uniknąć, stosując przeciążoną metodę Equals , która da oczekiwany wynik.

var comparison2 = left.Equals(right); // true

Alternatywnie, to samo można zrobić, rozpakowując left i right zmienną, aby porównać wartości int :

var comparison3 = (int)left == (int)right; // true

Konwersja typów wartości w pudełkach

Typy wartości pudełkowych można rozpakować tylko do ich oryginalnego Type , nawet jeśli konwersja dwóch Type s jest prawidłowa, np .:

object boxedInt = (int)1; // int boxed in an object

long unboxedInt1 = (long)boxedInt; // invalid cast

Można tego uniknąć poprzez pierwsze rozpakowanie do oryginalnego Type , np .:

long unboxedInt2 = (long)(int)boxedInt; // valid


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow