小知识:.Net中?和??的含义

      int? demo = null;          // int? 的含义是什么
      int result = demo ?? -5;   // ?? 的含义是什么
      result = (int)(result + demo);
      Console.WriteLine(result);


T? 表示 System.Nullable<T>,int ?表示System.Nullable<int>;

“demo ?? -5” 表示在demo为null时返回-5

下面引用自MSDN:

对于System.Nullable泛型结构,表示基础类型为值类型的对象,值类型与引用类型一样也可以分配 空引用(在 Visual Basic 中为 Nothing)。

对于一个类型,如果既可以给它分配一个值,也可以给它分配 空引用(在 Visual Basic 中为 Nothing)(表示没有任何值),我们就说这个类型是可空的。因此,可空类型可表示一个值,或表示不存在任何值。例如,类似 String 的引用类型就是可空类型,而类似 Int32 的值类型不是可空类型。由于值类型的容量只够表示适合于该类型的值,因此它不可为空;值类型没有表示空值所需的额外容量。

Nullable 结构支持只将一个值类型用作可空类型,因为引用类型本身就是可空的。

Nullable 类为 Nullable 结构提供补充支持。Nullable 类支持获取可空类型的基础类型,以及对基础值类型不支持一般的比较和相等性操作的可空类型进行成对的比较和相等性操作。

方案

根据不同的应用场合,可使用可空类型来表示存在或不存在的内容。例如,HTML 标记的某个可选属性可能存在于某一个标记中,但不存在于另一个标记中;或者数据库表的某个可空列可能存在于表的某一行中,但不存在于另一行中。

可将属性或列表示为类中的字段,并且可将该字段定义为值类型。该字段可包含属性或列的所有有效值,但不能提供一个附加值来表示属性或列不存在。在这种情况下,应将该字段定义为可空类型,而不是值类型。

基本属性

Nullable 结构的两个基础成员为 HasValueValue 属性。如果 Nullable 对象的 HasValue 属性为 true,则可以使用 Value 属性访问该对象的值。如果 HasValue 属性为 false,则表示尚未定义该对象的值,并且尝试访问 Value 属性时会引发 InvalidOperationException

装箱和取消装箱

在对可空类型进行装箱时,公共语言运行库自动将 Nullable 对象的基础值(而不是 Nullable 对象本身)装箱。也就是说,如果 HasValue 属性为 true,则将 Value 属性的内容装箱。如果 HasValue 属性为 false,则将空引用(在 Visual Basic 中为 Nothing)装箱。在对可空类型的基础值进行取消装箱时,公共语言运行库创建一个新的初始化为基础值的 Nullable 结构。

// This code example demonstrates the Nullable<T> class.
// The code example defines a database table in which two columns 
// are nullable. In the application, an array of rows is created 
// and initialized. The table rows could subsequently be 
// written to a database.

using System;

class Sample 
{
// Define the "titleAuthor" table of the Microsoft "pubs" database. 
    public struct titleAuthor 
    {
    // Author ID; format ###-##-####
    public string au_id;
    // Title ID; format AA####
    public string title_id;
    // Author ORD is nullable.
    public short? au_ord;
    // Royalty Percent is nullable.
    public int? royaltyper;
    }

    public static void Main() 
    {
// Declare and initialize the titleAuthor array.
    titleAuthor[] ta = new titleAuthor[3];
    ta[0].au_id = "712-32-1176";
    ta[0].title_id = "PS3333";
    ta[0].au_ord = 1;
    ta[0].royaltyper = 100;
  
    ta[1].au_id = "213-46-8915";
    ta[1].title_id = "BU1032";
    ta[1].au_ord = null;
    ta[1].royaltyper = null;

    ta[2].au_id = "672-71-3249";
    ta[2].title_id = "TC7777";
    ta[2].au_ord = null;
    ta[2].royaltyper = 40;

// Display the values of the titleAuthor array elements, and 
// display a legend.
    Display("Title Authors Table", ta);
    Console.WriteLine("Legend:");
    Console.WriteLine("An Author ORD of -1 means no value is defined.");
    Console.WriteLine("A Royalty % of 0 means no value is defined.");
    }

// Display the values of the titleAuthor array elements.
    public static void Display(string dspTitle, 
                               titleAuthor[] dspAllTitleAuthors)
    {
    Console.WriteLine("*** {0} ***", dspTitle);
    foreach (titleAuthor dspTA in dspAllTitleAuthors)
       {
       Console.WriteLine("Author ID ... {0}", dspTA.au_id);
       Console.WriteLine("Title ID .... {0}", dspTA.title_id);
       Console.WriteLine("Author ORD .. {0}", dspTA.au_ord ?? -1);
       Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper ?? 0);
       Console.WriteLine();       
       }
    }
}

/*
This code example produces the following results:

*** Title Authors Table ***
Author ID ... 712-32-1176
Title ID .... PS3333
Author ORD .. 1
Royalty % ... 100

Author ID ... 213-46-8915
Title ID .... BU1032
Author ORD .. -1
Royalty % ... 0

Author ID ... 672-71-3249
Title ID .... TC7777
Author ORD .. -1
Royalty % ... 40

Legend:
An Author ORD of -1 means no value is defined.
A Royalty % of 0 means no value is defined.

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果您想在零基础的情况下学好.Net Core,以下是一些建议: 1. 学习基础知识:在开始学习.Net Core之前,您需要掌握C#语言和面向对象编程的基础知识。您可以通过网上的教程或参加课程来学习这些基础知识。 2. 学习.Net Core框架:.Net Core框架是.Net平台的开源版本,提供了跨平台、高性能的应用程序开发环境。您可以通过官方文档或其他在线资源来学习.Net Core框架。 3. 练习编程:在学习过程,您需要经常练习编程。您可以尝试编写一些简单的.Net Core应用程序来巩固您的知识。 4. 参与社区:参与.Net Core社区可以帮助您更好地了解该框架,获得更多的资源和帮助。您可以加入.Net Core的官方论坛或参加本地的.Net Core社区活动。 5. 持续学习:由于技术变化很快,您需要持续学习来跟上最新的.Net Core技术和趋势。您可以阅读相关的博客、文章、书籍或参加在线课程来继续学习。 ### 回答2: 学好.Net Core需要一定的学习和实践,以下是零基础学习.Net Core的建议: 1. 学习基础知识:首先需要了解.Net Core的基础知识,包括框架的概念、特性和使用场景等。可以通过阅读相关书籍、在线教程和视频教程等途径进行学习。 2. 理解核心概念:.Net Core包含很多核心概念,如依赖注入、间件、路由等。理解这些概念的含义和用途是学习.Net Core的基础。 3. 编写实践项目:理论知识需要与实践相结合。通过编写小型的实践项目来巩固所学的知识,例如创建一个简单的网站或API应用程序。可以使用.Net Core提供的模板和工具来快速启动项目。 4. 参与社区活动:参加本地或在线的.Net Core社区活动,与其他开发人员交流和分享经验。加入社区可以获得更多的学习资源和实际案例。 5. 持续学习与更新:.Net Core是一个不断发展的技术,要学好它需要保持持续学习和更新的态度。了解最新的功能和最佳实践,关注微软官方文档和博客的更新,参与相关的培训和研讨会。 总结而言,学好.Net Core需要耐心和坚持的学习过程。通过掌握基础知识、理解核心概念、实践项目、参与社区活动和持续学习更新,可以逐步提高.Net Core的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值