C# 运算符的简化操作(四)

05 sizeof 运算符

a8ef238857e8cb184f5e3a92ababdfe9.png

295a06c39319564127bc902a70487d95.png

使用 sizeof 运算符可以确定栈中值类型需要的长度(单位是字节):Console.WriteLine(sizeof(int));

其结果是显示数字 4,因为 int 有 4 个字节长。

其结果是显示数字 4,因为 int 有 4 个字节长。如果结构体只包含值类型,也可以使用sizeof 运算符和结构 —— 如下所示的 Point 类:

public struct Point
{
  public Point (int x, int y)
  {
    X = x;
    Y = y;
  }
  public int X { get; }
  public int Y { get; }
}

注意

类不能使用 sizeof 运算符。

如果对复杂类型(而非基本类型)使用 sizeof 运算符,就需要把代码放在 unsafe 块中,如下所示:

unsafe
{
  Console.WriteLine(sizeof(Point));
}

注意

默认情况下不允许使用不安全的代码,需要在 csproj 项目文件中指定AllowUnsafeBlocks。

06 typeof 运算符

82d359340e4e81dd0a7078a06db5f5c6.png

typeof 运算符返回一个表示特定类型的 SystemType 对象。例如,typeof(string)返回表示 System.String 类型的 Type 对象。在使用反射技术动态地查找对象的相关信息时,这个运算符很有用。

07  nameof 运算符

b026df16d251c2be3f8e627b78b3da29.png

f5b3e573b8aa39dd03999f647573c256.png

nameof 是新的 C#6 运算符。该运算符接受一个符号、属性或方法,并返回其名称。这个运算符如何使用?一个例子是需要一个变量的名称时,如检查参数是否为null:

public void Method(object o)
{
  if (o == null) throw new ArgumentNullException(nameof(o));

当然,这类似于传递一个字符串而不是使用 nameof 运算符来抛出异常。然而,如果名称拼错,传递字符串并不会显示一个编译器错误。另外,改变参数的名称时,就很容易忘记更改传递到 ArgumentNullException 构造函数的字符串。

if (o == null) throw new ArgumentNullException("o");

对变量的名称使用 nameof 运算符只是一个用例。还可以使用它得到属性的名称,例如,在属性 set 访问器中触发改变事件(使用 INotifyPropertyChanged接口),并传递属性的名称。

public string FirstName
{
  get => _firstName; 
  set
  {
   _firstName = value;
   onPropertyChanged(nameof(FirstName));
   }
 }

nameof 运算符也可以用来得到方法的名称。如果方法是重载的,它同样适用,因为所有的重载版本都得到相同的值:方法的名称。

public void Method()

{

    Log($"{nameof(Method)} called");

08 index 运算符

07b03e8c0b066dadacc12d80be6c4fa9.png

在 “ 数组 ” 中将使用索引运算符(括号)访问数组。这里传递数值 2,使用索引运算符访问数组 arr1 的第三个元素:

int[] arr1 = {1,2,3,4};

int x = arr1[2];  // x == 3

类似于访问数组元素,索引运算符用集合类实现。

索引运算符不需要把整数放在括号内,并且可以用任何类型定义。下面的代码片段创建了一个泛型字典,其键是一个字符串,值是一个整数。在字典中,键可以与索引器一起使用。在下面的示例中,字符串 first 传递给索引运算符,以设置字典里的这个元素,然后把相同的字符串传递给索引器来检索此元素:

var dict = new Dictionary<string,int>();

dict["first"] = 1;

int x = dict["first"];

技术群: 需要进技术群学习交流的请添加小编微信,切记备注:加群,对以上内容有什么疑问也可以直接和小编直接沟通交流!     

小编微信:mm1552923   

公众号:dotNet编程大全   

往期推荐

35e7740a4ed3ee1f0a0105e0a47a7eab.png

Love life,love yourself

关注小编不迷路呦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值