繁体   English   中英

c#中什么是可空类型?

[英]What is nullable type in c#?

当我们必须在 C#.net 中使用可空类型时? 任何人都可以用例子解释一下。

可空类型(何时使用可空类型)是可以将 null 作为值的值类型。 它的默认值是null意味着你没有给它赋值。 值类型的示例有 int、float、double、DateTime 等。这些类型有这些默认值

int x = 0;
DateTime d = DateTime.MinValue;
float y = 0;

对于 Nullable 替代方案,上述任何一项的默认值为 null

int? x = null; //no value
DateTime? d = null; //no value

这使它们的行为类似于引用类型,例如对象、字符串

string s = null;
object o = null;

当从表返回的值为NULL时,它们在处理来自数据库的值时非常有用。 想象一下您的数据库表中的一个整数值可能为 NULL,如果 c# 变量不可为空,则只能用0表示 - 常规整数。

此外,想象一个EndDate列,其值直到将来的实际时间才确定。 可以在数据库中将其设置为 NULL,但您需要一个可为空的类型来将其存储在 C# 中

DateTime StartDate = DateTime.Today;
DateTime EndDate? = null; //we don't know yet

什么时候我们必须在 C#.net 中使用可空类型?

想象一下,有一个整数变量id代表一个特定的id

您可以存储144或其他任何内容。但是如果您不知道 id 怎么办。您不能只存储-10 。您可能正在考虑分配null但通常null不能分配给值类型。

int id=null;//error

Nullable type使您能够做到这一点。


int,double,char..这样的值类型不能表示为NULL值。

要在值类型中表示null ,您必须使用nullable type ..

它表示为值类型,后跟?

int? id=null;

这被转换为

Nullable<int> id=new Nullable<int>();

可为空类型的默认值为null

可空类型是 C#2.0 中引入的新概念,它允许用户将空值分配给 C# 语言的原始数据类型。 重要的是这里不是 Nullable 类型是 Structure 类型。

BlogPost: Nullable 类型——为什么我们在编程语言中需要 Nullable 类型?

来自: http : //msdn.microsoft.com/en-us/library/1t3y8s4s( v=vs.80) .aspx Nullable 类型是 System.Nullable 结构的实例。 可空类型可以表示其基础值类型的正常值范围,外加一个额外的空值。 例如,Nullable<Int32>,发音为“Nullable of Int32”,可以分配从 -2147483648 到 2147483647 的任何值,也可以分配空值。 可以为 Nullable<bool> 分配值 true 或 false 或 null

class NullableExample
{
    static void Main()
    {
        int? num = null;
        if (num.HasValue == true)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        //y is set to zero
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM