05 sizeof 运算符
使用 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 运算符
typeof 运算符返回一个表示特定类型的 SystemType 对象。例如,typeof(string)返回表示 System.String 类型的 Type 对象。在使用反射技术动态地查找对象的相关信息时,这个运算符很有用。
07 nameof 运算符
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 运算符
在 “ 数组 ” 中将使用索引运算符(括号)访问数组。这里传递数值 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编程大全
往期推荐
Love life,love yourself
关注小编不迷路呦~