Поиск…


Неизменяемый ссылочный тип - строка

// 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);
    }
}

Тип значения - 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';

Тип значения - короткий, int, long (16-битные, 32-битные, 64-битные целые числа)

// 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;

Также возможно сделать эти типы обнуляемыми, что означает, что дополнительно к обычным значениям также может быть присвоен нуль. Если переменная с нулевым типом не инициализируется, она будет равна нулю, а не 0. Нулевые типы помечены добавлением вопросительного знака (?) После типа.

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

Тип значения - ushort, uint, ulong (неподписанные 16 бит, 32 бит, 64 битные целые числа)

// 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;

Также возможно сделать эти типы обнуляемыми, что означает, что дополнительно к обычным значениям также может быть присвоен нуль. Если переменная с нулевым типом не инициализируется, она будет равна нулю, а не 0. Нулевые типы помечены добавлением вопросительного знака (?) После типа.

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

Тип значения - 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");
}

Ключевое слово bool является псевдонимом System.Boolean. Он используется для объявления переменных для хранения логических значений, true и false .

Сравнение со значениями в штучной упаковке

Если типы значений присваиваются переменным типа object они в штучной упаковке - значение сохраняется в экземпляре System.Object . Это может привести к непреднамеренным последствиям при сравнении значений с == , например:

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

var comparison1 = left == right;      // false

Этого можно избежать, используя перегруженный метод Equals , который даст ожидаемый результат.

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

В качестве альтернативы, то же самое можно сделать, распакуя left и right переменные, чтобы сравнить значения int :

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

Преобразование типов значений в штучной упаковке

Типы в штучной упаковке могут быть только распакованы в исходный Type , даже если выполняется преобразование двух Type s, например:

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

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

Этого можно избежать при первом распаковке исходного Type , например:

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow