c#入门学习笔记

p35 @字符串

在字符串之前加上一个@,可以保持原生字符,不用再进行转义(除了双引号)。

例如:

@"A short list:
item 1
item 2"

或者:

@"C:\Temp\MyDir\MyFile.doc"

这相当于"C:\\Temp\\MyDir\\MyFile.doc"

p41 using static

可以使用using static System.Console来将静态成员直接包含到作用域中。

这样访问WriteLine()方法就不用再加上静态类名了。

p71 typeof 运算符

typeof运算符可以得到操作数的类型。
例如:

string myString = "north";
orientation myDirection = (orientation)Enum.Parse(typeof(orientation), myString);

p80 数组问号

int?[] myIntArray = new int?[7] {5, intValue, 9, 10, null, 2, 99};

注意紧跟在int声明之后的问号?。问号旨在让编译器直到这个int[]数组可以包含空对象,若没有这个问号,就会显示编译异常。

其次,要注意在初始化一个整数时,通常将其默认设置为0。

p80多维数组

二维数组格式:

int[,] intArray;

多维数组格式:

int[,,,] intArray;

初始化:

double[,] hillHeight = new double[3,4];

也可以用字面值进行初始赋值:

double[,] hillHeight = {{1,2,3,4}, {2,3,4,5}, {3,4,5,6}};

访问:

double[,] hillHeight = {{1,2,3,4}, {2,3,4,5}, {3,4,5,6}};
foreach (double height in hillHeight){
	Console.WriteLine($"{height}");
}
hillHeight[0,0]
hillHeight[0,1]
hillHeight[0,2]
...
hillHeight[1,2]

这种数组叫做矩形数组,因为每一行的元素个数都相同。

还有一种锯齿数组(jagged array),详情见p82。

p98 ref和out

ref关键字可用于返回类型和入参类型。
使用例子:

  1. 首选在函数形参处指定ref
    static void ShowDouble(ref int val)
    {
    	val*=2;
    	Conosole.WriteLine($"val doubled = {val}");
    }
    
  2. 在函数调用时需要再次指定(这是必需的)
    int myNumber = 5;
    Console.WriteLine($"myNumber = {myNumber}");
    ShowDouble(ref myNumber);
    Console.WriteLine($"myNumber = {myNumber}");
    

ref必须在外部初始化,C#不允许假定ref参数在使用它的函数中初始化。

也就是说下面的用法是非法的:

int muNumber;
ShowDouble(ref myNumber);
Console.WriteLine($"myNumber = {myNumber}");

除了ref外,还要out关键字。

使用out关键字时,必须把它看成尚未赋值。
调用函数时会丢弃out中存储的值。

例子:

static int MaxValue(int[] intArray, out int maxIndex)
{
	int maxVal = intArray[0];
	maxIndex = 0;
	for(int i=1, i<intArray.Length; ++i)
	{
		if(intArray[i] > maxVal)
		{
			maxVal = intArray[i];
			maxIndex = i;
		}
	}
	return maxVal;
}

使用该函数:

int[] myArray = {1,2,2,,1,332,22,12211};
Console.WriteLine("maximum value" + $"{MaxValue(myArray, out int maxIndex)}");
Console.WriteLine("The first occurrence of this value is " 
					+ $"at element {maxIndex + 1}");

p100 元组

示例:

var numbers = {1,2,3,4,5};

上面代码创建了一个名为numbers的元组,其中包含成员Item1、Item2、Item3、Item4和Item5。

可以以下面的方式来访问这些成员:

var number = numbers.Item1;

还可以给成员指定特定的名称来明确标识:

(int one, int two, int three, int four, int five)nums = {1,2,3,4,5};
int first = nums.one;

p135 双问号空值合并操作符

friend ?? throw new ArgumentNullException(paraName: nameof(friend), message: "null")

上面的带使用了双问号(??),称为空值合并操作符(null-coalescing operator),检查所赋的值是否为null,若为null,则抛出ArgumentNullException函数;否则将该值赋给变量。

双问号(??)是一个单元运算符,其左右两边数据类型必须是相同类型或能隐形转换类型的。意思是,首先检测左边的值,若为Null,那么整个表达式取值为右侧的值,否则为左侧的值。

例如:string s = null; Console.Write(s ?? "abc");。将打印出"abc"。
例如:string s = "a"; Console.Write(s ?? "abc");将打印出"a"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

barbyQAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值