服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 中 System.Index 结构体和 Hat 运算符(^)的使用示例

C# 中 System.Index 结构体和 Hat 运算符(^)的使用示例

2022-10-10 15:20技术译站 C#

这篇文章主要介绍了C# 中 System.Index 结构体和 Hat 运算符(^)的使用示例,帮助大家更好的理解和使用C#,感兴趣的朋友可以了解下

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

今天我们要讲的是 Hat 运算符(^)。目前为止,Hat 运算符(^)已经被用作布尔类型的异或运算符,以及字节、整型类型的按位异或运算符。在 C# 8 中,它有一个新的用法。

这个运算符的新用法是自动创建 Index 结构体的实例。那什么是 Index 结构呢?这在 C# 8 中也有介绍。
Index 结构体的代码(就像所有的 C# 代码一样)可以在github 上找到。你可以看到,它是一个相当简单的结构体,包含一个整数值,和一个定义是否应该从末尾开始计数的布尔值。
它有助于让访问数组比以往容易很多。我们可以很轻松地将这个值存储在一个 Index 类型中来代替一个整数,它比一个简单的整数更清楚地定义了我们的意图,并有助于避免该变量的误用。

到目前为止,当尝试访问数组中特定索引处的值时,我们总是从第一个元素开始考虑。那么 Hat 运算符(^)是如何帮助我们的呢?例如,如果你想获取一个已知大小的数组的最后一个的元素,你通常会从数组的 Length 中减去 1,并在检索时使用这个技巧或硬编码的数字。

例如:

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

你可以像下面的例子一样使用数组提供的变量:

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

这种方法也可以用于编译时长度未知的数组。并且这通常是首选方法,因为它表明您希望更容易地检索最后一项,而不是必须进行计数来查看哪个是第四项并验证它是最后一项。

适当的使用 Index 结构,我们可以很容易地创建一个索引值类型,这样我们就可以存储它并随心地重用它,以避免违反 DRY 原则。

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

译者注:
DRY 是 “Don't repeat yourself” 的缩写,是软件开发的一个原则,旨在减少软件模式的重复,用抽象来替代它,或者使用数据规范化来避免冗余。也就是说,在一个设计里,对于任何东西,都应该有且只有一个表示,其它的地方都应该引用这一处。这样需要改动的时候,只需调整这一处,所有的地方就都变更过来了。

但正如我们所看到的,我们还可以使用 fromEnd 参数来更好地表达我们希望检索最后一项,并在编译时从一个大小未知的数组中检索最后一项。

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

不过,我们需要记住的一点是,当从末尾开始计数时,不是以 0 开始的索引。把它想象成我们使用的 Length - x ,其中 x 就是我们在 Index 结构体构造函数中使用的值。

但是 Hat 运算符(^)在这一切中有何用武之地呢?唔,Hat 运算符(^) 是调用 Index 结构体时将 fromEnd 设置为 true 的简写方式。 比如,下面的两行是完全相同的:

?
1
2
3
4
5
6
7
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];

或者,如果你想要检索倒数第二项,你可以这么做:

?
1
2
3
4
5
6
7
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];

就这样,一个新的结构体类型和一个旧运算符(^)的新用法打包在一起了。

作者 : John Demetriou
译者 : 技术译民
出品 : 技术译站
链接 : 英文原文

以上就是C# 中 System.Index 结构体和 Hat 运算符(^)的使用示例的详细内容,更多关于C# 中 System.Index 结构体和 Hat 运算符的资料请关注服务器之家其它相关文章!

原文链接:https://ittranslator.cn/dotnet/csharp/2020/09/28/c-8-introducing-index-struct-and-a-brand-new-usage-for-the-hat-operator.html

延伸 · 阅读

精彩推荐
  • C#C#中常用的正则表达式

    C#中常用的正则表达式

    本文主要介绍了C#中常用的正则表达式。具有一定的参考价值,下面跟着小编一起来看下吧...

    蒙小米12012021-12-18
  • C#C#中WPF依赖属性的正确学习方法

    C#中WPF依赖属性的正确学习方法

    这篇文章主要介绍了C#中WPF依赖属性的正确学习方法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    Kiba5186922022-08-01
  • C#WPF调用Matlab函数的方法

    WPF调用Matlab函数的方法

    这篇文章主要为大家详细介绍了WPF调用Matlab函数的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    眾尋7832021-12-09
  • C#轻松学习C#的抽象类

    轻松学习C#的抽象类

    轻松学习C#的抽象类,对C#的抽象类感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的抽象类。...

    丿木呈广予口贝10012021-11-04
  • C#unity学习教程之定制脚本模板示例代码

    unity学习教程之定制脚本模板示例代码

    这篇文章主要给大家介绍了关于unity学习教程之定制脚本模板的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    禹泽鹏鹏9912022-03-07
  • C#C#实现将程序运行信息写入日志的方法

    C#实现将程序运行信息写入日志的方法

    这篇文章主要介绍了C#实现将程序运行信息写入日志的方法,可实现将程序运行信息写入日志并存储在Debug目录下的"/Log/PRG"下的功能,涉及C#针对日志的相关写...

    北风其凉8152021-10-19
  • C#C#多线程与异步的区别详解

    C#多线程与异步的区别详解

    多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,...

    123si4122022-01-06
  • C#C# 批量生成随机密码必须包含数字和字母并用加密算法加密

    C# 批量生成随机密码必须包含数字和字母并用加密算法加密

    这篇文章主要介绍了C# 批量生成随机密码必须包含数字和字母并用加密算法加密,需要的朋友参考下...

    SweetMemory10712021-12-20