Dlaczego nullable <T> zwraca inny typ niz ma naprawde

0

Jak w tytule mam zagwostke, dlaczego int? a = 5; a.GetType() zwraca int zamiast int?

0

Nie znam się to się wypowiem.
Int? to nadal int tylko z property nullable. Czy typ jest nullable określa się przez Nullable.GetUnderlyingType(). Tak mnie się wydaje, więc jak coś, to niech ktoś sprostuje bez bicia.

0

Bo tak jest sensowniej i tak to zostało zaklepane (decyzja projektowa). Oczywiście możesz się z tym spierać, to jest kwestia gustu w pewien sposób.

1

Tutaj masz wszystko wytłumaczone
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types
Typ Nullable<T> jest typem wartościowym - strukturą generyczną z dwoma polami : value typu T i hasValue typu bool . wartość false jesli struktura ma wartość - null.
Metoda GetType() to jest metoda klasy Object . Żeby z niej skorzystać trzeba wykonać pakowanie ( pakowanie jest niejawne - przez kompilator C#)
Pakowany jest typ bazowy czyli int nie int?.
Z typami referencyjnymi jest inaczej .
Jeśli chcesz sprawdzić czy coś jest nullable to robisz coś takiego. Przykład z MSDN

using System;

namespace ConsoleApp1
{
    class Program
    {
        public static void Main()
        {
            int? a = 14;
            Console.WriteLine(IsOfNullableType(a));  // output: True

            int b = 17;
            Console.WriteLine(IsOfNullableType(b));  // output: False
        }
        
static bool IsOfNullableType<T>(T o)
        {
            var type = typeof(T);
            return Nullable.GetUnderlyingType(type) != null;
        }
    }  
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1