基础
.net 与 c#
F5 运行 (绿箭头)
F6 检查(2013) 生成---》生成解决方案
生成---》生成解决方案 ctrl+shift+b 检查错误
vs2017 快捷键:https://blog.csdn.net/williamgavin/article/details/78693483
home 行首 end行尾
shift + end shift+home 选一行
#Region #endregion 添加折叠 +注释会显示注释内容
c#注释
格式化输出
数据类型
变量命名规范
变量交换
python 中 a,b = b,a c#中不能用
方式3
int n1 = 10,n2 =20; if ((n1-n2)> 0) { n1 = n1 - (n1 - n2); n2 = n2 + (n1 - n2); } else { n1 = n1 + (n2 - n1); n2 = n2 - (n2 - n1); }
字符串输入
String name = Console.ReadLine(); //别忘了 String
String name = Console.ReadLine();
Console.WriteLine("my name is {0}",name);
Console.ReadKey();
转义符
在windows系统中 /n没有作用(控制台和苹果系统可以使用) 需要使用 /r/n
string n1 = "huluwa", n2 = "yeye", n3 = "pikaqiu", n4 = "shuma"; Console.WriteLine("{0}"+"{1}",n1,n2); Console.WriteLine("{0}"+"\n"+"{1}",n4,n3); Console.WriteLine("{0}"+"\r\n"+"{1}",n4,n3); Console.WriteLine("{0}"+@"\n"+"{1}",n4,n3); Console.ReadKey();
bool
注意
d = 3 因为 n1,n2为int
int n1 = 10,n2 =3; double d = n1*1.0/n2 或 int n1 = 10; double n2 =3; double d = n1*1.0/n2 d= 3.33333
int n1 = -10; //decimal 不能喝float,double加减 int、char+float= single(单精度浮点) float n3 = 10.123f; decimal n4 = 15.66M; double n5 = 33.33; char c = 'r'; //String name = Console.ReadLine(); //Console.WriteLine("my name is {0}",name); Console.WriteLine((n3+n1).GetType()); Console.WriteLine((n1+n4).GetType()); Console.WriteLine((n3+n5).GetType()); Console.WriteLine((c+n5).GetType()); Console.WriteLine((c+n1).GetType()); Console.WriteLine((c+n4).GetType()); Console.WriteLine((c + n3).GetType()); Console.WriteLine((n3 + n1)); Console.WriteLine((n1 + n4)); Console.WriteLine((n3 + n5)); Console.WriteLine((c + n5)); Console.WriteLine((c + n1)); Console.WriteLine((c + n4)); Console.WriteLine((c + n3)); Console.ReadKey(); --------------------------------------------------------- System.Single System.Decimal System.Double System.Double System.Int32 System.Decimal System.Single 0.1230001 5.66 43.4530001449585 147.33 104 129.66 124.123
decimal 与 float和double 并行
Convert 类型转换
Convert.ToDecimal(s)
int.parse() 是其他类型转换为int类型
其他数据类型均可使用
前++/--与后++/--
是否为闰年
优先级
判断语句
if if嵌套if if--else if--else-if
switch case
using System; namespace DecisionMaking { class Program { static void Main(string[] args) { /* 局部变量定义 */ char grade = 'B'; switch (grade) { case 'A': Console.WriteLine("很棒!"); break; case 'B': case 'C': Console.WriteLine("做得好"); break; case 'D': Console.WriteLine("您通过了"); break; case 'F': Console.WriteLine("最好再试一下"); break; default: Console.WriteLine("无效的成绩"); break; } Console.WriteLine("您的成绩是 {0}", grade); Console.ReadLine(); } } }
------------------------------
做得好 case 'B'没有break 回向下继续运行直到有break
您的成绩是 B
循环 for foreach(d迭代循环) while while--do(先循环) do---while(先do)
//for
using System; namespace Loops { class Program { static void Main(string[] args) { for (; ; ) { Console.WriteLine("Hey! I am Trapped"); } } } } 当条件表达式不存在时,它被假设为真。您也可以设置一个初始值和增量表达式,但是一般情况下,程序员偏向于使用 for(;;) 结构来表示一个无限循环。
namespace Loops
{
class Program
{
static void Main(string[] args)
{
/* for 循环执行 */
for (int a = 10; a < 20; a = a + 1)
{
Console.WriteLine("a 的值: {0}", a);
}
Console.ReadLine();
}
}
}
=====================================
a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19
========================================================
foreach
C# 也支持 foreach 循环,使用foreach可以迭代数组或者一个集合对象。
以下实例有三个部分:
- 通过 foreach 循环输出整型数组中的元素。
- 通过 for 循环输出整型数组中的元素。
- foreach 循环设置数组元素的计算器。
class ForEachTest
{
static void Main(string[] args)
{
int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibarray)
{
System.Console.WriteLine(element);
}
System.Console.WriteLine();
// 类似 foreach 循环
for (int i = 0; i < fibarray.Length; i++)
{
System.Console.WriteLine(fibarray[i]);
}
System.Console.WriteLine();
// 设置集合中元素的计算器
int count = 0;
foreach (int element in fibarray)
{
count += 1;
System.Console.WriteLine("Element #{0}: {1}", count, element);
}
System.Console.WriteLine("Number of elements in the array: {0}", count);
}
}
--------------------------------------------------------------------------------------------
0
1
1
2
3
5
8
13
0
1
1
2
3
5
8
13
Element #1: 0
Element #2: 1
Element #3: 1
Element #4: 2
Element #5: 3
Element #6: 5
Element #7: 8
Element #8: 13
Number of elements in the array: 8
//do using System; namespace Loops { class Program { static void Main(string[] args) { /* 局部变量定义 */ int a = 10; /* while 循环执行 */ while (a < 20) { Console.WriteLine("a 的值: {0}", a); a++; } Console.ReadLine(); } } } -------------------------------------------- a 的值: 10 a 的值: 11 a 的值: 12 a 的值: 13 a 的值: 14 a 的值: 15 a 的值: 16 a 的值: 17 a 的值: 18 a 的值: 19
using System; namespace Loops { class Program { static void Main(string[] args) { /* 局部变量定义 */ int a = 10; /* do 循环执行 */ do { Console.WriteLine("a 的值: {0}", a); a = a + 1; } while (a < 20); Console.ReadLine(); } } } ================================= a 的值: 10 a 的值: 11 a 的值: 12 a 的值: 13 a 的值: 14 a 的值: 15 a 的值: 16 a 的值: 17 a 的值: 18 a 的值: 19
异常捕获
C# 异常处理 异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。 try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。 catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。 finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。 throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。 语法 假设一个块将出现异常,一个方法使用 try 和 catch 关键字捕获异常。try/catch 块内的代码为受保护的代码,使用 try/catch 语法如下所示: try { // 引起异常的语句 } catch( ExceptionName e1 ) { // 错误处理代码 } catch( ExceptionName e2 ) { // 错误处理代码 } catch( ExceptionName eN ) { // 错误处理代码 } finally { // 要执行的语句 }
using System; namespace ErrorHandlingApplication { class DivNumbers { int result; DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; } catch (DivideByZeroException e) { Console.WriteLine("Exception caught: {0}", e); } finally { Console.WriteLine("Result: {0}", result); } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(25, 0); Console.ReadKey(); } } } ------------------------------------------------------------------------- Exception caught: System.DivideByZeroException: Attempted to divide by zero. Result: 0
创建用户自定义异常 您也可以定义自己的异常。用户自定义的异常类是派生自 ApplicationException 类。下面的实例演示了这点: 实例 using System; namespace UserDefinedException { class TestTemperature { static void Main(string[] args) { Temperature temp = new Temperature(); try { temp.showTemp(); } catch(TempIsZeroException e) { Console.WriteLine("TempIsZeroException: {0}", e.Message); } Console.ReadKey(); } } }//主函数 public class TempIsZeroException: ApplicationException { public TempIsZeroException(string message): base(message) { }//重写 }//自定义异常类继承 ApplicationException
public class Temperature
{
int temperature = 0;
public void showTemp()
{
if(temperature == 0)
{
throw (new TempIsZeroException("Zero Temperature found"));
}
else
{
Console.WriteLine("Temperature: {0}", temperature);
}
}
}-------------------------------------------------------------------
TempIsZeroException: Zero Temperature found
抛出对象 如果异常是直接或间接派生自 System.Exception 类,您可以抛出一个对象。您可以在 catch 块中使用 throw 语句来抛出当前的对象,如下所示: Catch(Exception e) { ... Throw e }
程序调试
F11 = 一步一步运行 可以看运行步骤 F11以后调试窗口--》窗口--》监视 可以在监视窗口输入变量观察其变化
断点调试=打点+f11
三元表达式
计算质数
常亮,枚举,结构
枚举
枚举类型转换成int
正常从0开始递加 如果赋值则从该数值开始递加
int类型转枚举
int n1=100; n1.ToString()
字符串转枚举类型()
例子(网络在线问题)
结构 (可以一次性存储多个不同类型的变量)
例子
数组(可以一次性存储多个相同类型的变量)
4种创建数组方法
练习
冒泡排序
、
多维数组
# 支持多维数组。多维数组又称为矩形数组。 您可以声明一个 string 变量的二维数组,如下: string [,] names; 或者,您可以声明一个 int 变量的三维数组,如下: int [ , , ] m; 多维数组可以通过在括号内为每行指定值来进行初始化。下面是一个带有 3 行 4 列的数组。 int [,] a = new int [3,4] { {0, 1, 2, 3} , /* 初始化索引号为 0 的行 */ {4, 5, 6, 7} , /* 初始化索引号为 1 的行 */ {8, 9, 10, 11} /* 初始化索引号为 2 的行 */ }; 访问二维数组元素 二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。例如: int val = a[2,3]; 上面的语句将获取数组中第 3 行第 4 个元素。您可以通过上面的示意图来进行验证。让我们来看看下面的程序,我们将使用嵌套循环来处理二维数组: 实例 using System; namespace ArrayApplication { class MyArray { static void Main(string[] args) { /* 一个带有 5 行 2 列的数组 */ int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} }; int i, j; /* 输出数组中每个元素的值 */ for (i = 0; i < 5; i++) { for (j = 0; j < 2; j++) { Console.WriteLine("a[{0},{1}] = {2}", i, j, a[i,j]); } } Console.ReadKey(); } } } --------------------------------------------------------------------------------------- a[0,0]: 0 a[0,1]: 0 a[1,0]: 1 a[1,1]: 2 a[2,0]: 2 a[2,1]: 4 a[3,0]: 3 a[3,1]: 6 a[4,0]: 4 a[4,1]: 8 一个遍历多维数组的方法,三重循环: int[, ,] muarr = new int[2, 2, 3] { {{1,2,3},{4,5,6}}, {{7,8,9},{2,3,4}} }; int rank = muarr.Rank; Console.WriteLine("该多维数组的维数为:{0}",rank); int rlength = muarr.GetLength(1); Console.WriteLine("该多维数组的第二维有{0}个元素",rlength); Console.WriteLine("开始遍历多维数组"); Console.WriteLine("----------------------------------"); int wei = 0; for (int i = 0; i < muarr.GetLength(0);i++ ) { for (int js1 = 0; js1< muarr.GetLength(1); js1++) { for(int js2 = 0;js2<muarr.GetLength(2);js2++) { Console.WriteLine("最低维度{0}的值为{1}",wei,muarr[i,js1,js2]); } ++wei; } }
C# Array 类
Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义。Array 类提供了各种用于数组的属性和方法。
Array 类的属性
下表列出了 Array 类中一些最常用的属性:
序号 | 属性 & 描述 |
---|---|
1 | IsFixedSize 获取一个值,该值指示数组是否带有固定大小。 |
2 | IsReadOnly 获取一个值,该值指示数组是否只读。 |
3 | Length 获取一个 32 位整数,该值表示所有维度的数组中的元素总数。 |
4 | LongLength 获取一个 64 位整数,该值表示所有维度的数组中的元素总数。 |
5 | Rank 获取数组的秩(维度)。 |
如需了解 Array 类的完整的属性列表,请参阅微软的 C# 文档。
Array 类的方法
下表列出了 Array 类中一些最常用的方法:
序号 | 方法 & 描述 |
---|---|
1 | Clear 根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。 |
2 | Copy(Array, Array, Int32) 从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置。长度由一个 32 位整数指定。 |
3 | CopyTo(Array, Int32) 从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。索引由一个 32 位整数指定。 |
4 | GetLength 获取一个 32 位整数,该值表示指定维度的数组中的元素总数。 |
5 | GetLongLength 获取一个 64 位整数,该值表示指定维度的数组中的元素总数。 |
6 | GetLowerBound 获取数组中指定维度的下界。 |
7 | GetType 获取当前实例的类型。从对象(Object)继承。 |
8 | GetUpperBound 获取数组中指定维度的上界。 |
9 | GetValue(Int32) 获取一维数组中指定位置的值。索引由一个 32 位整数指定。 |
10 | IndexOf(Array, Object) 搜索指定的对象,返回整个一维数组中第一次出现的索引。 |
11 | Reverse(Array) 逆转整个一维数组中元素的顺序。 |
12 | SetValue(Object, Int32) 给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。 |
13 | Sort(Array) 使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。 |
14 | ToString 返回一个表示当前对象的字符串。从对象(Object)继承。 |