亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# 可空類(lèi)型的具體使用

 更新時(shí)間:2020年03月08日 16:54:09   作者:愛(ài)曉俊  
這篇文章主要介紹了C# 可空類(lèi)型的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在項(xiàng)目中我們經(jīng)常會(huì)遇到可為空類(lèi)型,那么到底什么是可為空類(lèi)型呢?下面我們將從4個(gè)方面為大家剖析。

1、可空類(lèi)型基礎(chǔ)知識(shí)

顧名思義,可空類(lèi)型指的就是某個(gè)對(duì)象類(lèi)型可以為空,同時(shí)也是System.Nullable結(jié)構(gòu)的實(shí)例??煽疹?lèi)型可以表示基礎(chǔ)值類(lèi)型正常范圍的值,然后再加上一次null值。當(dāng)然,也可以被賦值null值。比如Nullable<bool>可以被賦值true、false或者null。

聲明一個(gè)可空類(lèi)型的標(biāo)準(zhǔn)語(yǔ)句如下:

T? myNullableNum = rangedNum/new T?() or null;

比如,我們聲明一個(gè)可空值類(lèi)型并賦值null;

int? intClass = null; 

或者使用

int? intClass = new int?()

同時(shí),我們都知道,可空類(lèi)型是泛型Nullable<T>的實(shí)例,聲明如下:

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

從聲明中可以看出,它的基礎(chǔ)類(lèi)型T是可以包括structenum在內(nèi)的任何值類(lèi)型,但是不能是引用類(lèi)型,也不能是可空類(lèi)型;從這里我們可以看出,可能類(lèi)型不能嵌套使用。

在可空類(lèi)型中,它包含以下實(shí)例成員:

首先是HasValue,它是只讀屬性,用于判斷對(duì)象是否有值。如果當(dāng)前值非空,則返回true,否則返回flase;其次是Value,它也是只讀屬性,用于獲取對(duì)象的值。如果當(dāng)前值非空,則可以正常獲取到對(duì)應(yīng)的值,否則會(huì)拋出異常InvalidOperationException;接著是GetValueOrDefault()的實(shí)例方法。該方法通過(guò)HasValue和Value屬性來(lái)得到當(dāng)前的信息。如果當(dāng)前值非空,即HasValue是true,則返回Value的值;否則返回T類(lèi)型的默認(rèn)值,即私有字段value的默認(rèn)值。最后一個(gè)是GetValueOrDefault()實(shí)例方法。該方法依然是通過(guò)HasValue和Value屬性來(lái)得到當(dāng)前的信息。如果當(dāng)前值非空,即HasValue是true,則返回Value的值,否則返回默認(rèn)值defaultValue。

如果將可空類(lèi)型轉(zhuǎn)換為其基礎(chǔ)類(lèi)型,需要使用強(qiáng)制轉(zhuǎn)換或其Value屬性獲取:

int myInt = (int)myNullableInt;
int myInt = myNullableInt.Value;
//以上兩種方式,在可空類(lèi)型實(shí)例為null時(shí)會(huì)拋出異常,可以使用以下方式代替
int myInt = myNullableInt.GetValueOrDefault(); //其重載方法可以傳入默認(rèn)值

2、可空類(lèi)型的使用

在可空類(lèi)型中,常見(jiàn)的有使用單問(wèn)號(hào)?和雙問(wèn)號(hào)??來(lái)進(jìn)行設(shè)置。其中?常用于int,double,bool等無(wú)法直接賦值為null的數(shù)據(jù)類(lèi)型;所代表的含義是這個(gè)數(shù)據(jù)類(lèi)型是Nullable類(lèi)型。

int? k=10;
等同于
Nullable<int> k = new Nullable<int>(10);

int m; //默認(rèn)值為0
int? m; //默認(rèn)值為null

而??主要用于在判斷對(duì)象的值為null時(shí)所返回的指定的值。

int? num = null;
var k == num ?? 9;

對(duì)于可空類(lèi)型,屬于一種特殊的數(shù)據(jù)類(lèi)型,它可表示所對(duì)應(yīng)的基礎(chǔ)值類(lèi)型中正常范圍內(nèi)的值,再加上一個(gè)null值。

比如說(shuō)一個(gè)int類(lèi)型的對(duì)象,它可以被賦值為-2,147,483,648到2,147,483,647之間的任意值,也可以被賦值為null值。而對(duì)于一個(gè)bool類(lèi)型的值來(lái)說(shuō),它可以是true、false也可以是null。

聲明一個(gè)nullable類(lèi)型(可控類(lèi)型)的語(yǔ)法如下:

<data_type>?<variable_name> = null;

以下示例說(shuō)明:

using System;

namespace ExampleTest
{
  class Program
  {
    static void Main(string[] args)
    {
      int? objectNull = null;
      int? k = 80;
      double? db1 = new double?();
      double? db2 = 4.56;
      bool? b = new bool?();

      Console.WriteLine($"顯示可空類(lèi)型{objectNull},{k},{db1},{db2}");
      Console.WriteLine($"一個(gè)可空的布爾值:");
      Console.ReadLine();
    }
  }
}

而對(duì)于??的合并運(yùn)算符,它主要用于定義可空類(lèi)型和引用類(lèi)型的默認(rèn)值。在其運(yùn)算過(guò)程中,為類(lèi)型轉(zhuǎn)換定義了一個(gè)預(yù)設(shè)值,防止可空類(lèi)型的值是null。

using System;

namespace ExampleTest
{
  class Program
  {
    static void Main(string[] args)
    {
      double? objNull = null;
      double? k = 4.85;
      double db;
      db = objNull ?? 9.82;
      Console.WriteLine($"num3的值:{db}");
      db = k ?? 6.02;
      Console.WriteLine($"num3的值:{db}");
      Console.ReadLine();
    }
  }
}

3、可空類(lèi)型的案例使用

通過(guò)一個(gè)簡(jiǎn)單的前端查詢(xún)功能來(lái)看看可空類(lèi)型的使用。

頁(yè)面html

<div>
  姓名:<input id="Name" name="Name" style="width:60px" />
  性別:<select id="Kum" name="Kum">
    <option value="0">--請(qǐng)選擇--</option>
    <option value="1">男</option>
    <option value="2">女</option>
  </select>
</div>

傳入?yún)?shù)Dto

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebTest.Models
{
  public class TestInDto
  {
    /// <summary>
    /// 隔離點(diǎn)
    /// </summary>
    public int? Kum { get; set; }

    /// <summary>
    /// 姓名
    /// </summary>
    public string Name { get; set; }
  }
}

控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebTest.Models;

namespace WebTest.Controllers
{
  public class TestController : Controller
  {
    // GET: Test
    public ActionResult Index()
    {
      return View();
    }

    public ActionResult TestFunction(TestInDto testInDto)
    {
      if (!testInDto.Kum.HasValue)
        return Json(new { Success = false, Message = "請(qǐng)選擇性別", Data = "" });

      int? num = null;
      DateTime? dt = null;
      bool? b = null;
      var data = new TestOutDto
      {
        Name = testInDto.Name,
        Num = num ?? 10,
        Dt = dt ?? DateTime.Now,
        IsExist = b ?? false
      };
      return Json(new { Success = true, Message = "", Data = data });
    }
  }
}

4、總結(jié)

最后想說(shuō)說(shuō),可空類(lèi)型在日常的項(xiàng)目中還是會(huì)經(jīng)常使用到,針對(duì)每個(gè)邏輯層的方法對(duì)于傳入?yún)?shù)和返回參數(shù)而言,都可能存在使用可空類(lèi)型來(lái)進(jìn)行處理和轉(zhuǎn)化。

到此這篇關(guān)于C# 可空類(lèi)型的具體使用的文章就介紹到這了,更多相關(guān)C# 可空類(lèi)型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#多線程系列之進(jìn)程同步Mutex類(lèi)

    C#多線程系列之進(jìn)程同步Mutex類(lèi)

    本文詳細(xì)講解了C#多線程中的進(jìn)程同步Mutex類(lèi),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C#實(shí)現(xiàn)word和pdf格式互轉(zhuǎn)

    C#實(shí)現(xiàn)word和pdf格式互轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)C#實(shí)現(xiàn)word和pdf格式互轉(zhuǎn)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • C# 實(shí)現(xiàn)FTP上傳資料的示例

    C# 實(shí)現(xiàn)FTP上傳資料的示例

    這篇文章主要介紹了C# 實(shí)現(xiàn)FTP上傳資料的示例,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-12-12
  • C#中如何獲取文件圖標(biāo)

    C#中如何獲取文件圖標(biāo)

    這篇文章主要介紹了C#中如何獲取文件圖標(biāo)的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • c#繼承中的函數(shù)調(diào)用實(shí)例

    c#繼承中的函數(shù)調(diào)用實(shí)例

    這篇文章主要介紹了c#繼承中的函數(shù)調(diào)用,實(shí)例分析了C#繼承中的函數(shù)調(diào)用規(guī)律,有助于深入理解C#的繼承,需要的朋友可以參考下
    2015-01-01
  • C#中異步回調(diào)函數(shù)用法實(shí)例

    C#中異步回調(diào)函數(shù)用法實(shí)例

    這篇文章主要介紹了C#中異步回調(diào)函數(shù)用法,實(shí)例分析了異步回調(diào)函數(shù)的定義及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#獲取本機(jī)IP地址(ipv4)

    C#獲取本機(jī)IP地址(ipv4)

    本文主要介紹了C#獲取本機(jī)所有IP地址的方法、C#獲取本機(jī)IP地址(ipv4)的方法等。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • C#游戲開(kāi)發(fā)之實(shí)現(xiàn)俄羅斯方塊游戲

    C#游戲開(kāi)發(fā)之實(shí)現(xiàn)俄羅斯方塊游戲

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)經(jīng)典俄羅斯方塊游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • C#窗體間通訊的幾種常用處理方法總結(jié)

    C#窗體間通訊的幾種常用處理方法總結(jié)

    這篇文章主要介紹了C#窗體間通訊的幾種常用處理方法總結(jié),有很好的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-08-08
  • c#編寫(xiě)的番茄鐘倒計(jì)時(shí)器代碼

    c#編寫(xiě)的番茄鐘倒計(jì)時(shí)器代碼

    番茄鐘是老外做飯用的一個(gè)廚具,比如蒸包子,水開(kāi)后再蒸十分鐘,就把番茄鐘擰一下擰到10的刻度上,然后番茄鐘就嗒嗒嗒的慢慢歸位,等到十分鐘后完全歸位,然后就叮的響一聲,提醒老外把火關(guān)掉。
    2015-03-03

最新評(píng)論