[WPF 学习] 5. 2 C#8.0的几个有用的知识点
1. 索引和范围
例二、获取字符串最后一位的内容 例三、移除最后最后一位的内容 2. switch 属性模式 元组模式 位置模式 此外,请考虑以下表示象限的各种位置的枚举: 下面的方法使用位置模式 来提取 x 和 y 的值。 然后,它使用 when 子句来确定该点的 quadrant: 3. null 合并赋值 **4. 构造函数表达式
以下 .net 类型同时支持索引和范围:array、string、span
例一、获取身份证号码的生日 datetime getbirthdayfromidno(string idno)
{
if (idno.length != 18)
throw new exception("身份证号码不正确");
return new datetime(int.parse(idno.substring(6, 4)), int.parse(idno.substring(10, 2)), int.parse(idno.substring(12, 2)));
}
datetime getbirthdayfromidno2(string idno)
{
if (idno.length != 18)
throw new exception("身份证号码不正确");
return new datetime(int.parse(idno[6..10]), int.parse(idno[10..12]), int.parse(idno[12..14]));
}
var idno = "330726197303273114";
var s1 = idno.substring(idno.length - 1);
var s2 = idno.last();
var s3 = idno[^1];
var idno = "330726197303273114";
var s1 = idno.substring(0,idno.length - 1);
var s2 = idno.remove(idno.length - 1);
var s3 = idno[..^1];
表达式**public enum rainbow
{
red,
orange,
yellow,
green,
blue,
indigo,
violet
}
public static rgbcolor fromrainbow(rainbow colorband) =>
colorband switch
{
rainbow.red => new rgbcolor(0xff, 0x00, 0x00),
rainbow.orange => new rgbcolor(0xff, 0x7f, 0x00),
rainbow.yellow => new rgbcolor(0xff, 0xff, 0x00),
rainbow.green => new rgbcolor(0x00, 0xff, 0x00),
rainbow.blue => new rgbcolor(0x00, 0x00, 0xff),
rainbow.indigo => new rgbcolor(0x4b, 0x00, 0x82),
rainbow.violet => new rgbcolor(0x94, 0x00, 0xd3),
_ => throw new argumentexception(message: "invalid enum value", paramname: nameof(colorband)),
};
public static decimal computesalestax(address location, decimal saleprice) =>
location switch
{
{ state: "wa" } => saleprice * 0.06m,
{ state: "mn" } => saleprice * 0.75m,
{ state: "mi" } => saleprice * 0.05m,
// other cases removed for brevity...
_ => 0m
};
public static string rockpaperscissors(string first, string second)
=> (first, second) switch
{
("rock", "paper") => "rock is covered by paper. paper wins.",
("rock", "scissors") => "rock breaks scissors. rock wins.",
("paper", "rock") => "paper covers rock. paper wins.",
("paper", "scissors") => "paper is cut by scissors. scissors wins.",
("scissors", "rock") => "scissors is broken by rock. rock wins.",
("scissors", "paper") => "scissors cuts paper. scissors wins.",
(_, _) => "tie"
};
某些类型包含 deconstruct 方法,该方法将其属性解构为离散变量。 如果可以访问 deconstruct 方法,就可以使用位置模式 检查对象的属性并将这些属性用于模式。 考虑以下 point 类,其中包含用于为 x 和 y 创建离散变量的 deconstruct 方法:public class point
{
public int x { get; }
public int y { get; }
public point(int x, int y) => (x, y) = (x, y);
public void deconstruct(out int x, out int y) =>
(x, y) = (x, y);
}
public enum quadrant
{
unknown,
origin,
one,
two,
three,
four,
onborder
}
static quadrant getquadrant(point point) => point switch
{
(0, 0) => quadrant.origin,
var (x, y) when x > 0 && y > 0 => quadrant.one,
var (x, y) when x < 0 && y > 0 => quadrant.two,
var (x, y) when x < 0 && y < 0 => quadrant.three,
var (x, y) when x > 0 && y < 0 => quadrant.four,
var (_, _) => quadrant.onborder,
_ => quadrant.unknown
};
list<int> numbers = null;
int? i = null;
numbers ??= new list<int>();
numbers.add(i ??= 17);
numbers.add(i ??= 20);
console.writeline(string.join(" ", numbers)); // output: 17 17
console.writeline(i); // output: 17
public class test1
{
public int x { get; }
public int y { get; }
public test1(int x, int y)
{
x = x;
y = y;
}
}
public class test2
{
public int x { get; }
public int y { get; }
public test2(int x, int y) => (x, y) = (x, y);
}
上一篇: 网络常见的 9 大命令,非常实用!
下一篇: 线程池实例:继承ThreadGroup