What is the integer reference type in C#?

前端 未结 8 1066
日久生厌
日久生厌 2021-01-11 12:46

I\'d like to have an integer variable which can be set to null and don\'t want to have to use the int? myVariable syntax. I tried using int and

相关标签:
8条回答
  • 2021-01-11 13:13

    Yes, it's the only way, as Int32/Int16/int is a primitive type (regardless of boxing/unboxing of these).

    0 讨论(0)
  • 2021-01-11 13:14

    The <var>? syntax makes it nullable. If you dig a bit deeper, you'll see it's just a generic object that gets used.

    If you want to do it like C++ you must use unsafe operations. Then, pointers like in C are available, but your code doesn't conform to CLR...

    For using pure .NET without pointers, the ? is the way to go.

    0 讨论(0)
  • 2021-01-11 13:23

    Nullable types are instances of the System.Nullable(T) struct.
    Therefore int, int?, Nullable<int> are all value types, not reference types

    0 讨论(0)
  • 2021-01-11 13:23

    You could use System.Nullable<int> if you hate ? so much.

    0 讨论(0)
  • 2021-01-11 13:24

    You will have to use a nullable type, i.e:

    Nullable<int> or int?
    

    The purpose of nullable type is, to enable you to assign null to a value type.

    From MSDN:

    Nullable types address the scenario where you want to be able to have a primitive type with a null (or unknown) value. This is common in database scenarios, but is also useful in other situations.

    In the past, there were several ways of doing this:

    1. A boxed value type. This is not strongly-typed at compile-time, and involves doing a heap allocation for every type.
    2. A class wrapper for the value type. This is strongly-typed, but still involves a heap allocation, and the you have to write the wrapper.
    3. A struct wrapper that supports the concept of nullability. This is a good solution, but you have to write it yourself.
    0 讨论(0)
  • 2021-01-11 13:25

    For info, int? / Nullable<T> is not a reference-type; it is simply a "nullable type", meaning: a struct (essentially and int and a bool flag) with special compiler rules (re null checks, operators, etc) and CLI rules (for boxing/unboxing). There is no "integer reference-type" in .NET, unless you count boxing:

    int i = 123;
    object o = i; // box
    

    but this creates an unnecessary object and has lots of associated other issues.

    For what you want, int? should be ideal. You could use the long-hand syntax (Nullable<int>) but IMO this is unnecessarily verbose, and I've seen it confuse people.

    0 讨论(0)
提交回复
热议问题