【C#】运算符(二)
二、赋值运算符 运算符 类别 示例表达式 结果 = 二元 var1 = var2; var1被赋予var2的值 += 二元 var1 += var2; var1被赋予var1与var2的和 -= 二元 var1 -= var2; var1被...
二、赋值运算符 运算符 类别 示例表达式 结果 = 二元 var1 = var2; var1被赋予var2的值 += 二元 var1 += var2; var1被赋予var1与var2的和 -= 二元 var1 -= var2; var1被...
C#中包含许多执行各类处理的运算符。把变量、字面值(操作数)和运算符组合起来,就可以创建表达式,他是计算的基本构件。 运算符大致分为:一元运算符、二元运算符、三元运算符。 大多数运算符都是二元运算符,只有几个一元运算符和一个三元运算符,三元...
01. LEFT
从文本字符串的第一个字符开始返回指定个数的字符。
语法:LEFT(text, [num_chars])
例如:A1:ABCDE-12345
=LEFT(A1,4) → ABCD
=LEFT(A1) → A
02. RIGHT
根据所指定的字符数返回文本字符串中最后一个或多个字符。
语法:RIGHT(text,[num_chars])
例如:A1:ABCDE-12345
=RIGHT(A1,4) → 2345
=RIGHT(A1) → 5
03. MID
返回一个字符值,其中包含字符串中指定数量的字符。
语法:MID(text,[start_num],[num_chars])
例如:A1:ABCDE-12345
=MID(A1,6,3) → -12
结构,struct,structure的简写。
结构就是由几个数据组成的数据结构,这些数据可能具有不同的类型。根据这个结构可以定义自己的变量类型,实现自定义数据和行为的方法、属性等。
public struct Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y)
{
X = x;
Y = y;
}
public override string ToString()
{
return $"({X}, {Y})";
}
}
class Program
{
static void Main(string[] args)
{
Point p1 = new Point(1, 2);
Point p2 = p1; // 这里是按值复制,p2 是 p1 的副本
Console.WriteLine(p2.ToString()); // 输出: (1, 2)
}
}
Point 结构定义了两个只读属性 X 和 Y,以及一个构造函数来初始化这些值,并重写了 ToString 方法以方便打印点的坐标。在 Main 方法中,我们创建了一个 Point 实例 p1,并将它复制给了 p2。当我们打印 p2 时,我们可以看到它的值和 p1 相同。
枚举
用 enum 关键字定义枚举:
enum<typeName>
{
<value1>,
<value2>,
<value3>,
...
<valueN>
}
接着声明这个新类型变量:
<typeName> <varName>;
并赋值:
<varName> = <typeName>.<value>;
枚举使用一个基本类型来存储。枚举类型可取的每个值都存储为该基本类型的一个值,默认情况下该类型为int。通过在枚举声明中添加类型,就可以执行其它基本类型:
enum<typeName> : <underlyingType>
{
<value1>,
<value2>,
<value3>,
...
<valueN>
}
枚举的基本类型可以是 byte、sbyte、short、ushort、int、uint、long 和 ulong。
默认情况下,每个值都会根据定义的顺序从 0 开始,被自动赋予对应的基本类型值。意味着<valuel1>为0,<valuel2>为1,<valuel3>为2,…
可以重写这个赋值过程:使用=运算符,指定每个枚举的实际值:
enum<typeName> : <underlyingType>
{
<value1> = <actualVal1>,
<value2> = <actualVal2>,
<value3> = <actualVal3>,
...
<valueN> = <actualValN>
}
还可以使用一个值作为另一个枚举的基础值,为多个枚举指定相同的值:
enum<typeName> : <underlyingType>
{
<value1> = <actualVal1>,
<value2> = <value1>,
<value3>,
...
<valueN> = <actualValN>
}
未赋值的任何值都会自动获得一个初始值,这里使用的值是从比上一个明确声明的值大1开始的序列。例如,在上面的代码中, <value3>的值是<value1>+1。
隐式转换:从类型A到类型B的转换可在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。
显式转换:从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的额外处理。
一、隐式转换
隐式转换不需要做任何工作,也不需要另外编写代码。
var1 = var2
bool 和 string 没有隐式转换。
隐式数值转换
类型 | 可以安全地转换为 |
---|---|
byte | short,ushort,int,uint,long,ulong,float,double,decimal |
sbyte | short,int,long,float,double,decimal |
short | int,long,float,double,decimal |
ushort | int,uint,long,ulong,float,double,decimal |
int | long,float,double,decimal |
uint | long,ulong,float,double,decimal |
long | float,double,decimal |
ulong | float,double,decimal |
float | double |
char | ushort,int,uint,long,ulong,float,double,decimal |
如果发生显式转换,那么编译器会警告。
二、显式转换
明确要求编译器把数值从一种数据类型转为另一种数据类型。
(<destinationType>)<sourceVar>
将 <sourceVar> 中的值转换为 <destinationType> 类型
可以为表达式设置溢出检查,关键词—— checked 和 unchecked 。
checked(<expression>)
unchecked(<expression>)
使用检查溢出时,如果表达式中的显式转换造成了数据溢出,编译器会报错。
也可以通过修改属性来设置是否检查溢出的选项:Check for arithmetic overflow/unoverflow ,它会影响程序的执行速度,因此不需要时应禁用它。
三、使用Convert进行显式转换
它们总是会进行溢出检查,checked 和 unchecked 关键字以及项目属性设置不起作用。
全景-桃曲坡水库
——2023年08月
桃曲坡水库位于渭北石川河支流沮水河下游,坝址距耀县城15公里。水库于1969年动工兴建,1980年正式蓄水受益,1984年通过验收,水库总库容5720万立方米,兴利库容3602万立方米,死库容1683万立方米。
该水库是一座以灌溉为主,兼有城市供水、防洪、多种经营等综合利用的中型水库。设计灌溉面积31.83万亩。 水库枢纽工程设计等级为Ⅲ等,主要建筑物按3级设计,防洪标准按100年一遇洪水设计,1000年一遇洪水校核,地震烈度为6度。100年一遇洪峰流量为1780 立方米/秒,1000年一遇洪峰流量为3250 立方米/秒。100年一遇设计洪水时水库最大下泄量为1454 立方米/秒;1000年一遇校核洪水水库最大泄流量为2218 立方米/秒。 水库枢纽工程由均质土坝,侧槽式溢洪道和高、低放水洞四部分组成。
全景-东庄水利枢纽库区
——2024年03月
水库枢纽位于黄河二级支流泾河下游峡谷末端陕西省咸阳市礼泉县东庄乡,距咸阳市约80公里,距西安市约100公里, 距泾河下游谷口泾惠渠渠首约30公里。初拟最大坝高228m,总库容29.87亿立方米,防洪库容4.2亿立方米,拦沙和调水调沙库容20.2亿立方米。工程静态总投资93.02亿元。总工期为7年11个月,水库建成后,将有效缓解泾河和渭河同时发生洪水时渭河下游的防洪压力,减少渭河下游河道淤积,并可通过水库调水调沙,人造洪峰,增加渭河下游的冲刷机会,降低潼关高程,逐步恢复渭河下游功能,减轻洪涝灾害。