C#变量
变量是存储数据值的容器。
在 C# 中,有不同类型的变量(用不同的关键字定义),例如:
int- 存储整数(整数),不带小数,如123或-123double- 存储带小数的浮点数,例如19.99或-19.99char- 存储单个字符,如"a"或"B"。字符值用单引号括起来string- 存储文本,例如"Hello World"。字符串值用双引号括起来bool- 存储具有两种状态的值:true或false
声明(创建)变量
要创建变量,必须指定类型并为其赋值:
type variableName = value;其中type是 C# 类型(如int或string),variableName是变量的名称 (如x或name)。 等号用于为变量赋值。
要创建存储文本的变量,请查看以下示例:
实例
创建一个名为name的变量,类型为string并将其赋值为"John":
string name = "John"; Console.WriteLine(name);创建存储数字的变量,请查看以下示例:
创建一个名为myNum的int数字类型变量,并将其赋值为15:
int myNum = 15; Console.WriteLine(myNum);也可以在不赋值的情况下先声明变量,然后再赋值:
int myNum; myNum = 15; Console.WriteLine(myNum);请注意,如果将新值赋给现有变量,它将覆盖以前的值:
将myNum的值改为20:
int myNum = 15; myNum = 20; // myNum 现在是 20 Console.WriteLine(myNum);常量
如果不希望其他人(或您自己)覆盖现有值,可以用const关键字(这将声明变量为常量,意味着不可更改且为只读)。
const int myNum = 15; myNum = 20; // 错误当您希望变量始终存储相同的值,以便其他人(或您自己)不会弄乱您的代码时,const关键字就非常有用。一个经常被称为常数的例子是PI(3.14159…)。
注释:如果不赋值,则不能声明常量变量。如果执行此操作,将发生错误: 常量字段需要提供一个值.
其他类型
演示如何声明其他类型的变量:
int myNum = 5; double myDoubleNum = 5.99D; char myLetter = 'D'; bool myBool = true; string myText = "Hello";显示变量
WriteLine()方法通常用于向控制台窗口显示变量值。
要组合文本和变量,请使用+字符:
string name = "John"; Console.WriteLine("Hello " + name);也可以使用+字符将变量添加到另一个变量:
string firstName = "John "; string lastName = "Doe"; string fullName = firstName + lastName; Console.WriteLine(fullName);对于数值,+字符用作数学运算符 (请注意,此处使用int(integer) 变量):
int x = 5; int y = 6; Console.WriteLine(x + y); // 打印 x + y 的值从上述示例中,您可以预期:
- x存储值5
- y存储值6
- 然后我们使用
WriteLine()方法来显示x+y的值,即11
声明多个变量
要声明同一类型的多个变量,请使用逗号分隔的列表:
int x = 5, y = 6, z = 50; Console.WriteLine(x + y + z);C# 标识符
所有 C#variables变量必须用唯一的名称标识。
这些唯一的名称称为标识符。
标识符可以是短名称(如x和y)或更具描述性的名称(age、sum、totalVolume)。
注释:建议使用描述性名称来创建可理解和可维护的代码:
// Good int minutesPerHour = 60; // OK, 但并不那么容易理解 m 实际上是什么 int m = 60;构造变量名称(唯一标识符)的一般规则如下:
- 名称可以包含字母、数字和下划线
- 名字必须以字母开头
- 名称应以小写字母开头,并且不能包含空格
- 名称区分大小写("myVar" 和 "myvar" 是不同的变量)
- 保留字 (如 C# 关键字,
int或double) 不能用作名称
C# 数据类型
C# 数据类型
C# 中的变量必须是指定的数据类型:
int myNum = 5; // 整数(整数) double myDoubleNum = 5.99D; // 浮点数 char myLetter = 'D'; // 字符 bool myBool = true; // 布尔值 string myText = "Hello"; // 字符串数据类型指定变量值的大小和类型。对相应的变量使用正确的数据类型是很重要的;为了避免错误,节省时间和内存,但它也会使代码更易于维护和可读。
最常见的数据类型有:
| 数据类型 | 大小 | 描述 |
|---|---|---|
| int | 4 bytes | 存储整数,范围从 -2,147,483,648 到 2,147,483,647 |
| long | 8 bytes | 存储整数,范围-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| float | 4 bytes | 存储小数。足以存储6至7位十进制数字 |
| double | 8 bytes | 存储小数。足够存储15位小数 |
| bool | 1 bit | 存储布尔真值或假值 |
| char | 2 bytes | 存储单个字符/字母,用单引号括起来 |
| string | 2 bytes per character | 存储字符串,用双引号括起来 |
数字类型分为两组:
整数类型存储整数正数或负数(如123或-456),不带小数。有效类型为int和long。应该使用哪种类型取决于数值。
浮点类型表示带有小数部分的数字,其中包含一个或多个小数。有效类型是float和double。
尽管C#中有许多数字类型,但最常用的数字类型是int(表示整数)和double(表示浮点数)。
整数类型
Int
int数据类型可以存储从 -2147483648 到 2147483647。 一般创建带有数值的变量时,int数据类型是首选的数据类型。
int myNum = 100000; Console.WriteLine(myNum);Long
long数据类型可以存储从 -9223372036854775808 到 9223372036854775807。 当int不够大,无法存储值时,使用此选项。 请注意,该值应以"L"结尾:
long myNum = 15000000000L; Console.WriteLine(myNum);浮点类型
当需要小数点的数字时,应该使用浮点类型,例如9.99或3.14515。
Float
float浮点数据类型可以存储从 3.4e−038 到 3.4e+038的小数。请注意,该值应以"F"结尾:
float myNum = 5.75F; Console.WriteLine(myNum);Double
double双精度数据类型可以存储 1.7e−308 至 1.7e+308。请注意,可以用"D"结束值(尽管不是必需的):
double myNum = 19.99D; Console.WriteLine(myNum);使用float还是double?
浮点值的精度表示该值在小数点后可以有多少位数。浮点数的精度只有6或7位小数,而双变量的精度约为15位。因此,在大多数计算中使用double更安全。
科学数字
浮点数也可以是带"e"的科学数,表示10的幂:
float f1 = 35e3F; double d1 = 12E4D; Console.WriteLine(f1); Console.WriteLine(d1);布尔数据类型
布尔数据类型是用bool关键字声明的,只能采用true或false值:
实例
bool isCSharpFun = true; bool isFishTasty = false; Console.WriteLine(isCSharpFun); // 输出 True Console.WriteLine(isFishTasty); // 输出 False布尔值主要用于条件测试,您将在后面的章节中了解更多。
字符数据类型
char字符数据类型用于存储单个字符。字符必须用单引号括起来,如"A"或"c":
char myGrade = 'B'; Console.WriteLine(myGrade);字符串数据类型
string字符串数据类型用于存储字符序列(文本)。字符串值必须用双引号括起来:
string greeting = "Hello World"; Console.WriteLine(greeting);C# 类型转换
C# 类型转换
类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。
在 C# 中,类型转换有两种形式:
- 隐式类型转换(默认) - 将较小的类型转换为较大的类型大小,这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。
char->int->long->float->double - 显式类型转换(强制类型转换)。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。
double->float->long->int->char
隐式类型转换
将较小尺寸的类型传递给较大尺寸的类型时,会自动执行隐式转换:
实例
int myInt = 9; double myDouble = myInt; // 自动转换: int 到 double Console.WriteLine(myInt); // 输出 9 Console.WriteLine(myDouble); // 输出 9显式类型转换
必须手动执行显式强制转换,方法是将类型放在值前面的括号中:
实例
double myDouble = 9.78; int myInt = (int) myDouble; // 手动转换:double 到 int Console.WriteLine(myDouble); // 输出 9.78 Console.WriteLine(myInt); // 输出 9类型转换方法
还可以使用内置方法显式转换数据类型,例如Convert.ToBoolean,Convert.ToDouble,Convert.ToString,Convert.ToInt32(int) andConvert.ToInt64(long):
int myInt = 10; double myDouble = 5.25; bool myBool = true; Console.WriteLine(Convert.ToString(myInt)); // 将 int 转换为字符串 Console.WriteLine(Convert.ToDouble(myInt)); // 将 int 转换为 double Console.WriteLine(Convert.ToInt32(myDouble)); // 将 double 转换为 int Console.WriteLine(Convert.ToString(myBool)); // 将布尔转换为字符串C# 用户输入
获取用户输入
你已经学会了Console.WriteLine()用于输出(打印)值。现在我们将使用Console.ReadLine()以获取用户输入。
在下面的示例中,用户可以输入他或她的用户名,该用户名存储在变量userName中。然后我们打印用户名userName的值:
// 输入您的用户名并按回车 Console.WriteLine("Enter username:"); // 创建一个字符串变量并从键盘获取用户输入并将其存储在变量中 string userName = Console.ReadLine(); // 打印变量(userName)的值,将显示输入值 Console.WriteLine("Username is: " + userName);用户输入和数字
这个Console.ReadLine()方法返回字符串string。因此,无法从其他数据类型(如int)获取信息。以下程序将导致报错:
实例
Console.WriteLine("Enter your age:"); int age = Console.ReadLine(); Console.WriteLine("Your age is: " + age);错误信息是这样的:
Cannot implicitly convert type 'string' to 'int'正如错误消息所说,您不能隐式地将类型'string'转换为'int'。
幸运的是,刚刚从上一章(类型转换)中了解到,可以通过使用Convert.To方法:
实例
Console.WriteLine("Enter your age:"); int age = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Your age is: " + age);注释:如果输入错误(例如数字输入中的文本),则会收到异常/错误消息(如System.FormatException: 'Input string was not in a correct format.')。
C# 运算符
C# 运算符
运算符用于对变量和值执行操作。
在下面的示例中,我们使用+运算符将两个值相加:
int x = 100 + 50;+运算符通常用于将两个值相加,如上例所示,但它也可用于将变量和值相加,或将变量和另一个变量相加:
int sum1 = 100 + 50; // 150 (100 + 50) int sum2 = sum1 + 250; // 400 (150 + 250) int sum3 = sum2 + sum2; // 800 (400 + 400)算术运算符
算术运算符用于执行常见的数学运算:
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| + | 加法 | 将两个值相加 | x + y |
| - | 减法 | 从一个值减去另一个值 | x - y |
| * | 乘法 | 将两个值相乘 | x * y |
| / | 除法 | 分子除以分母 | x / y |
| % | 取模 | 取模运算符,整除后的余数 | x % y |
| ++ | 自增 | 自增运算符,整数值增加 1 | x++ |
| -- | 自减 | 自减运算符,整数值减少 1 | x-- |
C# 赋值运算符
赋值运算符用于为变量赋值。
在下面的示例中,我们使用赋值操作符(=)将值10分配给名为x的变量:
实例
int x = 10;加法赋值运算符(+=)向变量添加一个值:
实例
int x = 10; x += 5;所有赋值运算符的列表:
| 运算符 | 实例 | 等同于 |
|---|---|---|
| = | x = 5 | x = 5 |
| += | x += 3 | x = x + 3 |
| -= | x -= 3 | x = x - 3 |
| *= | x *= 3 | x = x * 3 |
| /= | x /= 3 | x = x / 3 |
| %= | x %= 3 | x = x % 3 |
| &= | x &= 3 | x = x & 3 |
| |= | x |= 3 | x = x | 3 |
| ^= | x ^= 3 | x = x ^ 3 |
| >>= | x >>= 3 | x = x >> 3 |
| <<= | x <<= 3 | x = x << 3 |
C# 关系运算符
关系运算符用于比较两个值:
| 运算符 | 名称 | 实例 |
|---|---|---|
| == | 等于 | x == y |
| != | 不等于 | x != y |
| > | 大于 | x > y |
| < | 小于 | x < y |
| >= | 大于或等于 | x >= y |
| <= | 小于或等于 | x <= y |
C# 逻辑运算符
逻辑运算符用于确定变量或值之间的逻辑:
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| && | 逻辑与 and | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | x < 5 && x < 10 |
| || | 逻辑或 or | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | x < 5 || x < 4 |
| ! | 逻辑非 not | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(x < 5 && x < 10) |
C# 数学运算
Math.Max(x,y)
Math.Max(x,y)方法可用于查找x和y的最大值:
实例
Math.Max(5, 10);Math.Min(x,y)
Math.Min(x,y)方法可用于查找x和y的最小值:
实例
Math.Min(5, 10);Math.Sqrt(x)
Math.Sqrt(x)方法返回x的平方根:
实例
Math.Sqrt(64);Math.Abs(x)
Math.Abs(x)方法返回x的绝对(正)值:
实例
Math.Abs(-4.7);Math.Round()
Math.Round()将数字四舍五入到最接近的整数:
实例
Math.Round(9.99);C# 字符串
C# 字符串
字符串用于存储文本。
一个string字符串变量包含由双引号括起的字符集合:
实例
创建string字符串类型的变量并为其赋值:
string greeting = "Hello";字符串长度
C# 中的字符串实际上是一个对象,它包含可以对字符串执行某些操作的属性和方法。例如,可以使用Length属性找到字符串的长度:
实例
string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; Console.WriteLine("The length of the txt string is: " + txt.Length);其他字符串方法
有许多字符串方法可用,例如ToUpper()和ToLower(),它们返回转换为大写或小写的字符串副本:
实例
string txt = "Hello World"; Console.WriteLine(txt.ToUpper()); // 输出 "HELLO WORLD" Console.WriteLine(txt.ToLower()); // 输出 "hello world"字符串串联
可以在字符串之间使用+运算符来组合它们。这称为串联:
实例
string firstName = "John "; string lastName = "Doe"; string name = firstName + lastName; Console.WriteLine(name);请注意,我们在"John"之后添加了一个空格,以便在打印时在firstName和lastName之间创建一个空格。
您也可以使用string.Concat()连接两个字符串的方法:
实例
string firstName = "John "; string lastName = "Doe"; string name = string.Concat(firstName, lastName); Console.WriteLine(name);字符串插值
字符串连接的另一个选项是字符串插值,它将变量的值替换为字符串中的占位符。请注意,您不必担心空格,例如串联:
实例
string firstName = "John"; string lastName = "Doe"; string name = $"My full name is: {firstName} {lastName}"; Console.WriteLine(name);还要注意,在使用字符串插值方法时,必须使用$符号
字符串插值是在C# version 6中引入的。
访问字符串
您可以通过引用方括号[]中的索引号来访问字符串中的字符。
此示例打印myString中的第一个字符:
实例
string myString = "Hello"; Console.WriteLine(myString[0]); // 输出 "H"注释:字符串索引以0开头:[0]是第一个字符,[1] 是第二个字符等。
本实例打印 myString 中的第二个字符(1):
实例
string myString = "Hello"; Console.WriteLine(myString[1]); // 输出 "e"你还可以使用IndexOf()方法查找字符串中特定字符的索引位置:
实例
string myString = "Hello"; Console.WriteLine(myString.IndexOf("e")); // 输出 "1"另一个有用的方法是Substring(),它从字符串中提取字符,从指定的字符位置/索引开始,然后返回一个新字符串。 此方法通常与IndexOf()一起使用,以获取特定的字符位置:
实例
// 全名 string name = "John Doe"; // 字母 D 的位置 int charPos = name.IndexOf("D"); // 获取 lastName string lastName = name.Substring(charPos); // 打印结果 Console.WriteLine(lastName);特殊字符
特殊字符必须写在引号内,否则C#会误解此字符串,并生成错误:
string txt = "We are the so-called "Vikings" from the north.";
避免此问题的解决方案是使用反斜杠转义字符。
反斜杠(\)转义字符将特殊字符转换为字符串:
| 转义符 | 结果 | 描述 |
|---|---|---|
| \' | ' | 单引号 |
| \" | " | 双引号 |
| \\ | \ | 反斜杠 |
转义符\"在字符串中插入双引号:
实例
string txt = "We are the so-called \"Vikings\" from the north.";转义符\'在字符串中插入一个反斜杠:
实例
string txt = "It\'s alright.";\\在字符串中插入一个反斜杠:
实例
string txt = "The character \\ is called backslash.";C# 中其他有用的转义符有:
| 代码 | 结果 |
|---|---|
| \n | New Line |
| \t | Tab |
| \b | Backspace |
添加数字和字符串
警告!
C# 使用 + 运算符进行加法和串联。
记住:数字相加,字符串联。
如果将两个数字相加,结果将是一个数字:
实例
int x = 10; int y = 20; int z = x + y; // z 将为 30(整数/数字)如果将两个字符串相加,结果将是字符串串联:
实例
string x = "10"; string y = "20"; string z = x + y; // z 将是 1020(一个字符串)如有侵联系删!!!