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

C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例

 更新時(shí)間:2020年09月28日 08:39:22   作者:技術(shù)譯站  
這篇文章主要介紹了C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例,幫助大家更好的理解和使用C#,感興趣的朋友可以了解下

翻譯自 John Demetriou 2019年2月17日 的文章 《C# 8 – Introducing Index Struct And A Brand New Usage For The Hat Operator》

今天我們要講的是 Hat 運(yùn)算符(^)。目前為止,Hat 運(yùn)算符(^)已經(jīng)被用作布爾類型的異或運(yùn)算符,以及字節(jié)、整型類型的按位異或運(yùn)算符。在 C# 8 中,它有一個(gè)新的用法。

這個(gè)運(yùn)算符的新用法是自動(dòng)創(chuàng)建 Index 結(jié)構(gòu)體的實(shí)例。那什么是 Index 結(jié)構(gòu)呢?這在 C# 8 中也有介紹。
Index 結(jié)構(gòu)體的代碼(就像所有的 C# 代碼一樣)可以在github 上找到。你可以看到,它是一個(gè)相當(dāng)簡(jiǎn)單的結(jié)構(gòu)體,包含一個(gè)整數(shù)值,和一個(gè)定義是否應(yīng)該從末尾開始計(jì)數(shù)的布爾值。
它有助于讓訪問(wèn)數(shù)組比以往容易很多。我們可以很輕松地將這個(gè)值存儲(chǔ)在一個(gè) Index 類型中來(lái)代替一個(gè)整數(shù),它比一個(gè)簡(jiǎn)單的整數(shù)更清楚地定義了我們的意圖,并有助于避免該變量的誤用。

到目前為止,當(dāng)嘗試訪問(wèn)數(shù)組中特定索引處的值時(shí),我們總是從第一個(gè)元素開始考慮。那么 Hat 運(yùn)算符(^)是如何幫助我們的呢?例如,如果你想獲取一個(gè)已知大小的數(shù)組的最后一個(gè)的元素,你通常會(huì)從數(shù)組的 Length 中減去 1,并在檢索時(shí)使用這個(gè)技巧或硬編碼的數(shù)字。

例如:

int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[4];

你可以像下面的例子一樣使用數(shù)組提供的變量:

int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[array.Length - 1];

這種方法也可以用于編譯時(shí)長(zhǎng)度未知的數(shù)組。并且這通常是首選方法,因?yàn)樗砻髂M菀椎貦z索最后一項(xiàng),而不是必須進(jìn)行計(jì)數(shù)來(lái)查看哪個(gè)是第四項(xiàng)并驗(yàn)證它是最后一項(xiàng)。

適當(dāng)?shù)氖褂?Index 結(jié)構(gòu),我們可以很容易地創(chuàng)建一個(gè)索引值類型,這樣我們就可以存儲(chǔ)它并隨心地重用它,以避免違反 DRY 原則。

Index lastItem = new Index(4, false);
int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[lastItem];

譯者注:
DRY 是 “Don't repeat yourself” 的縮寫,是軟件開發(fā)的一個(gè)原則,旨在減少軟件模式的重復(fù),用抽象來(lái)替代它,或者使用數(shù)據(jù)規(guī)范化來(lái)避免冗余。也就是說(shuō),在一個(gè)設(shè)計(jì)里,對(duì)于任何東西,都應(yīng)該有且只有一個(gè)表示,其它的地方都應(yīng)該引用這一處。這樣需要改動(dòng)的時(shí)候,只需調(diào)整這一處,所有的地方就都變更過(guò)來(lái)了。

但正如我們所看到的,我們還可以使用 fromEnd 參數(shù)來(lái)更好地表達(dá)我們希望檢索最后一項(xiàng),并在編譯時(shí)從一個(gè)大小未知的數(shù)組中檢索最后一項(xiàng)。

Index lastItem = new Index(1, true);
int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[lastItem];

不過(guò),我們需要記住的一點(diǎn)是,當(dāng)從末尾開始計(jì)數(shù)時(shí),不是以 0 開始的索引。把它想象成我們使用的 Length - x ,其中 x 就是我們?cè)?Index 結(jié)構(gòu)體構(gòu)造函數(shù)中使用的值。

但是 Hat 運(yùn)算符(^)在這一切中有何用武之地呢?唔,Hat 運(yùn)算符(^) 是調(diào)用 Index 結(jié)構(gòu)體時(shí)將 fromEnd 設(shè)置為 true 的簡(jiǎn)寫方式。 比如,下面的兩行是完全相同的:

Index lastItem = new Index(1, true); // line 1
int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[lastItem];

Index lastItem = ^1; //line 2, 同 line 1
int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[lastItem];

或者,如果你想要檢索倒數(shù)第二項(xiàng),你可以這么做:

Index secondToLast = new Index(2, true);
int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[secondToLast];

Index secondToLast = ^2;
int[] array = new int[] { 1, 3, 5, 7, 9 };
var x = array[secondToLast];

就這樣,一個(gè)新的結(jié)構(gòu)體類型和一個(gè)舊運(yùn)算符(^)的新用法打包在一起了。

作者 : John Demetriou
譯者 : 技術(shù)譯民
出品 : 技術(shù)譯站
鏈接 : 英文原文

以上就是C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例的詳細(xì)內(nèi)容,更多關(guān)于C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#規(guī)則引擎RulesEngine的具體使用

    C#規(guī)則引擎RulesEngine的具體使用

    這篇文章主要介紹了C#規(guī)則引擎RulesEngine的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C#打印類PrintDocument、PrintDialog、PrintPreviewDialog使用示例

    C#打印類PrintDocument、PrintDialog、PrintPreviewDialog使用示例

    這篇文章主要介紹了C#打印類PrintDocument、PrintDialog、PrintPreviewDialog使用示例,本文分別給出了示例代碼,需要的朋友可以參考下
    2015-06-06
  • C#圖片上傳效果實(shí)例分析

    C#圖片上傳效果實(shí)例分析

    這篇文章主要介紹了C#圖片上傳效果實(shí)現(xiàn)方法,可實(shí)現(xiàn)圖片上傳效果預(yù)覽功能,需要的朋友可以參考下
    2015-06-06
  • WPF實(shí)現(xiàn)自定義Panel面板的示例詳解

    WPF實(shí)現(xiàn)自定義Panel面板的示例詳解

    WPF中的Panel(面板),是繼承自FrameworkElement的抽象類,表示一個(gè)可以用來(lái)排列子元素的面板,本文主要來(lái)和大家聊聊WPF如何實(shí)現(xiàn)自定義Panel,感興趣的可以了解下
    2023-09-09
  • c# 使用WebRequest實(shí)現(xiàn)多文件上傳

    c# 使用WebRequest實(shí)現(xiàn)多文件上傳

    這篇文章主要介紹了c# 使用WebRequest實(shí)現(xiàn)多文件上傳的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#設(shè)計(jì)模式之行為型模式詳解

    C#設(shè)計(jì)模式之行為型模式詳解

    這篇文章主要為大家詳細(xì)介紹了C#設(shè)計(jì)模式之行為型模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#實(shí)現(xiàn)單例模式的多種方式

    C#實(shí)現(xiàn)單例模式的多種方式

    這篇文章介紹了C#實(shí)現(xiàn)單例模式的多種方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 那些年,我還在學(xué)習(xí)C# 學(xué)習(xí)筆記續(xù)

    那些年,我還在學(xué)習(xí)C# 學(xué)習(xí)筆記續(xù)

    那些年學(xué)習(xí)C#,就是對(duì)C#相關(guān)的一些知識(shí)有一個(gè)了解,等到要用時(shí)才不會(huì)找不到方向,比如說(shuō)擴(kuò)展方法,開始時(shí)怎么覺得沒有用,后來(lái)了解到asp.net MVC,它可以用來(lái)擴(kuò)展Html類,比如做一個(gè)分頁(yè)的方法;所以對(duì)一門語(yǔ)言了解寬一些是沒有壞處的
    2012-03-03
  • C#單向鏈表實(shí)現(xiàn)非升序插入方法的實(shí)例詳解

    C#單向鏈表實(shí)現(xiàn)非升序插入方法的實(shí)例詳解

    單向鏈表是一種數(shù)據(jù)結(jié)構(gòu),其中元素以線性方式連接在一起,每個(gè)元素都指向下一個(gè)元素,非升序插入意味著元素不是按升序(從小到大)插入鏈表中,本文給大家介紹了C#單向鏈表實(shí)現(xiàn)非升序插入方法的實(shí)例,需要的朋友可以參考下
    2024-03-03
  • Unity3D實(shí)現(xiàn)模型隨機(jī)切割

    Unity3D實(shí)現(xiàn)模型隨機(jī)切割

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)模型隨機(jī)切割,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03

最新評(píng)論