Основы преобразования типа Nullable в Nullable - PullRequest
3 голосов
/ 12 февраля 2010

Каковы основы преобразования типа Nullable в Nullable?

Что происходит внутри CLR?

является ли тип значения внутренне преобразованным в ссылочный тип?

int i = 100;

and int ? i = 7?

это оба значения типа?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2010

int? - это то же самое, что Nullable<int>, который является структурой, то есть типом значения. Здесь нет преобразований в ссылочные типы.

Вот определение Nullable из MSDN:

[SerializableAttribute]
public struct Nullable<T> where T : struct, new()
1 голос
/ 12 февраля 2010

int? i это просто сокращение для System.Nullable <int> i. Оба действительно являются типами значений.

0 голосов
/ 12 февраля 2010

Запустите это, чтобы увидеть, что int? является типом значения:

class Program
{
    static int? nullInt;

    static void Main(string[] args)
    {
        nullInt = 2;
        Console.WriteLine(string.Format("{0} + 3 != {1}", nullInt, DoMath(nullInt , 3).ToString()));
        Console.WriteLine(string.Format("{0} * 3 = {1}" , nullInt , DoMultiply(nullInt , 3).ToString()));

        nullInt = null;
        Console.WriteLine(string.Format("{0} + 3 != {1}" , nullInt , DoMath(nullInt , 3).ToString()));
        Console.WriteLine(string.Format("{0} * 3 = {1}" , nullInt , DoMultiply(nullInt , 3).ToString()));

        Console.ReadLine();
    }

    static int? DoMath(int? x , int y)
    {
        if (x.HasValue)
        {
            return (++x) + y;
        }
        else
            return y;
    }

    static int DoMultiply(int? x , int y)
    {
        if (x.HasValue)
        {
            return (int)x * y;
        }
        else
            return 0;
    }
}

Я считаю, что это очень интересно и подходит для умного использования.

То, что ? делает, это создает пустую ссылку на тип значения, не равный нулю. Это как указатель, который можно проверить - HasValue (логическое значение)? Приятной особенностью Nullable< T > является то, что свойство Value не нужно приводить к его исходному типу - эта работа выполняется для вас внутри обнуляемой структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...