- 前言
- 一、C#编程基础
- 1.理解格式字符串
- 2.b=a++; 先将a的值赋给b,运算完成后,变量a自加一
- 3.TryParse方法或System.Convert方法
- 4.在转换类型时异常处理:将容易出错的代码封装到try块中、捕获所有异常、捕获特定异常
- 5.C#输出乘法表
- 6.数据类型转换
- 7.try-catch异常捕获
- 8.switch-case
- 9.请用户输入年份,在输入月份,输出该月的天数(年份分平年和闰年)
- 10.将字符串转换为某种数据类型
- 11.将枚举类型强转为int类型 枚举类型和int类型相互兼容
- 12.将int类型强转为枚举类型
- 13.所有的数据类型都能够转换成string类型 .ToString
- 14.将String类型转换为枚举类型
- 二、C#方法基础
- 1.什么是方法
- 2.return
- 3.continue
- 4.out参数
- 5.ref参数
- 6.params参数
- 7.方法的重载
- 8.方法的递归
- 9.将数字保留几位小数
- 总结
前言
成功往往不是一蹴而就
一、C#编程基础
//using static System.Console 以简化代码
//Main方法中
int numberOfApples = 12;
decimal pricePerApple = 0.35M //C#中声明变量为十进制10使用decimal,并且在数字后加字母M
Console.WriteLine(
format:"{0} apples costs {1:C}", //使用编号的未知参数可以使得字符串中相应位置输出当前值
arg0: numberOfApples,
arg1: pricePerApple * numberOfApples);
Console.WriteLine($"{numberOfApples} apples costs {pricePerApple * numberOfApples:C}"); //使用$为前缀的字符串可以在变量或表达式名称两边使用花括号,从而输出变量或表达式在字符串相应位置的当前值
//1.使用@作为前缀的字符串,可以把字符串中的“格式字符串”定义为字符串进行输出
//即取消在字符串中的转义作用,使其单纯的表示为一个‘’符号
//2.使字符串按照编辑的原格式输出
OUT:12 apples costs _4.20
1.理解格式字符串**可以在逗号或冒号后使用格式字符串对变量或表达式进行格式化**
PS.
N0格式的字符串:表示有千位分隔符且没有小数点的数字;
C格式:表示货币
X格式:十六进制计数法对值进行格式化
D格式:使用长日期格式的日期部分
//格式项的完整语法
{index [, alignment] [: formatString]}
{a,-5} //5个字符长度,且-5<0左对齐,反之,右对齐
//循环遍历参数值
foreach (string arg in args)
{
WriteLine(arg);
}
2.b=a++; 先将a的值赋给b,运算完成后,变量a自加一
b = ++a; 先a自加一,然后带着加一后的值去参与运算
3.TryParse方法或System.Convert方法//使用TryParse方法转换输入字符串,避免异常
Write("How many eggs are there?");
int count;
string input = Console.ReadLine(); //用户输入字符串然后回车
if (int.TryParse(input, out count)) //转换输入字符串
//byte.TryParse将数字字符串转换为与之等效的byte,并返回一个指示转换是否成功得知,True/False
{
WriteLine($"There are {count} eggs.");
}
else
{
WriteLine("I could not parse the input.");
}
4.在转换类型时异常处理:将容易出错的代码封装到try块中、捕获所有异常、捕获特定异常
//使用TryParse方法转换输入字符串,避免异常
Write("How many eggs are there?");
string input = Console.ReadLine(); //用户输入字符串然后回车
try
{
int count = int.Parse(input); //转换输入字符串
WriteLine($"There are {count} eggs.");
}
catch (FormatException) //捕获特定异常
{
WriteLine("The input you entered is not a valid number format.");
}
catch (Exception ex) //先捕获所有异常,然后确定发生了那种类型的异常后,在前面加入捕获特定异常catch语句
{
WriteLine($"{ex.GetType()} says {ex.Message}");
}
5.C#输出乘法表
using static System.Console;
namespace WrittingFunctions
{
class Program
{
static void TimesTable(byte number)
{
WriteLine($"This is the {number} times table:");
for (int row = 1; row <=12; row++)
{
WriteLine($"{row} X {number} = {row * number}");
}
WriteLine();
}
static void RunTimesTable()
{
bool isNumber;
do
{
Write("Enter a number between 0 and 255:");
isNumber = byte.TryParse(ReadLine(), out byte number); //byte.TryParse将数字字符串转换为与之等效的byte,并返回一个指示转换是否成功得知,True/False
if (isNumber)
{
TimesTable(number);
}
else
{
WriteLine("You did not enter a valid number!");
}
}
while (isNumber);
}
static void Main(string[] args)
{
RunTimesTable();
}
}
}
注意do-while会一直循环,可以修改
double dd = 3.1415;
int number = (int)dd; //强制显示类型转换
//int-->double 自动隐式类型转换
//double-->int 大转小,强制显示类型转换,需要在小的数据前加(double)(double为大的数据类型)
//整数*1.0可以将一个整数提升为double类型
Console.WriteLine("n1={0:0.000}", a); // :0.00为保留两位小数,小数点后有几个零就代表保留几位小数
7.try-catch异常捕获
异常捕获与作用域概念
使用异常捕获之前,要正常书写代码,在程序运行之后,把可能出现的代码行加入到try - catch中
语法上没有错误,在程序运行的过程中,由于某些原因出现了错误,程序不能正常的运行
哪行代码有可能报错,你就踹他一脚,经常性用try - catch来进行异常捕获
语法
try
{
可能会出现异常的代码;
}
catch
{
出现异常后要执行的代码;
}
作用域
变量的作用域就是指你能够使用到这个变量的范围
变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束
在这个范围内,我们可以访问并使用变量,超出这个范围就无法访问该变量
//异常捕获与作用域概念
//使用异常捕获之前,要正常书写代码,在程序运行之后,把可能出现的代码行加入到try - catch中
//语法上没有错误,在程序运行的过程中,由于某些原因出现了错误,程序不能正常的运行
//哪行代码有可能报错,你就踹他一脚,经常性用try - catch来进行异常捕获
//语法
//try
//{
// 可能会出现异常的代码;
//}
//catch
//{
// 出现异常后要执行的代码;
//}
//作用域
//变量的作用域就是指你能够使用到这个变量的范围
//变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束
//在这个范围内,我们可以访问并使用变量,超出这个范围就无法访问该变量
//number变量报错,因为变量的作用域
bool b = true;
int number = 0;//声明一个变量
Console.WriteLine("请输入一个数字:(按回车键结束)");
try
{
//赋值
number = Convert.ToInt32(Console.ReadLine());//如果这行代码出现异常,立即退出try语句,进入catch语句
//某行代码出现异常后,try里面剩下的语句都不会执行了
}
catch
{
Console.WriteLine("您输入的数据不规范!");
b = false;
}
//让代码满足某些条件去执行的话,使用bool类型
if (b)
{
//使用
//我们要执行下面这行代码,需要满足某些条件
Console.WriteLine(number * 2);
}
8.switch-case
//多条件定值
bool b = true;
int salary = 5000;
Console.WriteLine("请输入工资的等级评定:");
string level = Console.ReadLine();
switch(level) //注意case后面的变量类型要和switch括号里面的变量类型一致
{
case "A":salary += 500; //如果两个case中的代码完全相同,可以删除第一个case冒号后面的代码,简化代码
break;
case "B":salary += 200;
break;
case "C":
break;
case "D":salary -= 200;
break;
case "E":salary -= 500;
break;
default:Console.WriteLine("输入有误,程序退出");
b = false;
break;
}
if(b)
{
Console.WriteLine("您的工资为{0}", salary);
}
9.请用户输入年份,在输入月份,输出该月的天数(年份分平年和闰年)
//定义三个变量,用来存储年份,月份。天数
int year = 0;
int month = 0;
int day = 0;
Console.WriteLine("请输入所要查询的年份:");
//使用try-catch进行异常捕获
try
{
year = Convert.ToInt32(Console.ReadLine()); //对输入进行数据类型转换
Console.WriteLine("请输入所要查询的月份:");
//使用try-catch进行异常捕获
try
{
month = Convert.ToInt32(Console.ReadLine());
if (month >= 1 && month <= 12)
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
day = 29;
}
else
{
day = 28;
}
break;
default:
day = 30;
break;
}
Console.WriteLine($"{year}年的{month}月有{day}天");
}
else
{
Console.WriteLine("您输入的月份超出范围,程序退出!");
}//if-else的括号
}
catch (FormatException)
{
Console.WriteLine("The input you entered is not a valid number format.");
}
catch (Exception ex) //先捕获所有异常,然后确定发生了哪种异常后,在前面加入捕获特定异常的catch语句捕获该特定异常
{
Console.WriteLine($"{ex.GetType()} says {ex.Message}");
}
}
catch(FormatException) //捕获该特定异常System.某某 捕获特定异常的括号里面就要填入该某某
{
Console.WriteLine("The input you entered is not a valid number format.");
}
catch(Exception ex) //先捕获所有异常,然后观察输出确定发生了哪种异常后,在前面加入捕获特定异常的catch语句捕获该特定异常
{
Console.WriteLine($"{ex.GetType()} says {ex.Message}");
}
10.将字符串转换为某种数据类型
1.进行数据转换的时候,面上过得去就转换成功,转换不成则程序抛异常
int i = Convert.ToInt32("123");
2.用法和Convert一样,效率更高一些,有int.Parse()/double.Parse()/char.Parse()
int j = int.Parse("123");
//注意
使用TryParse方法,当数据转换成功时,返回bool值为True,然后out转换后相应数据类型的值;若无法进行数据转换,则为False,out变量值为0
//int number = 0;
TryParse方法中需要有 参数 返回值
//bool b = int.TryParse("123asd", out number);
11.将枚举类型强转为int类型 枚举类型和int类型相互兼容
QQState state = QQState.Online; int n = (int)state; //数据类型强制转换 Console.WriteLine(n); //输出对应的枚举量对应的标签 递增1 //默认第一个枚举量对应的数字标签为0,可以人为对其进行修改 Console.WriteLine((int)QQState.Offline);12.将int类型强转为枚举类型
int n1 = 3; QQState s = (QQState)n1; //如果int值超出对应的枚举数目,则返回原来的int值 Console.WriteLine(s);13.所有的数据类型都能够转换成string类型 .ToString
//所有的类型都能够转换成string类型 .ToString int n1 = 10; Console.WriteLine(n1.ToString()); QQState state = QQState.Online; Console.WriteLine(state.ToString()); //将枚举类型转换为String类型14.将String类型转换为枚举类型
//要转换的类型 变量名 = (要转换的类型)Enum.Parse(typeof(要转换的类型), "要转换的字符串");
//如果转换的字符串是数字,就算枚举中没有对应的,也不会抛异常
//如果转换的字符串是除数字之外的字符串,如果枚举中没有,则程序会抛异常
//将n1转换成枚举类型
//Convert.ToInt32() int.Parse() int.TryParse()
//调用Parse()方法就是为了让它帮助我们将一个字符串转换成对应的枚举类型
string n1 = "3";
QQState state = (QQState)Enum.Parse(typeof(QQState), n1);
Console.WriteLine(state);
二、C#方法基础
1.什么是方法
**每构造一个新的方法的时候,需要对其进行解释备注 ///
//方法 (需要和Main方法并列)
//函数就是将一堆代码进行重用的机制
//函数的语法:
//[public] static 返回值类型 方法名([参数列表])
//{
// 方法体;
//}
//返回值类型,如果不需要写返回值,则写void
//方法名:Pascal 每个单词的首字母都要大写,其余字母小写
//参数列表:完成这个方法所必须要提供给这个方法的条件。如果不需要有参数,则小括号也不能省略。
//方法写好后,如果想要被执行,必须要在Main()函数中调用
//方法的调用语法
//类名.方法名([参数]);
//***在某些情况下,类名是可以省略的,如果你写的方法和Main()方法在同一个类中,这个时候,类名就可以被省略
在某些情况下,类名是可以省略的,如果你写的方法和Main()方法在同一个类中,这个时候,类名就可以被省略
//计算两个整数之间的最大值 //调用该类下的某个方法 int max = Program.GetMax(1, 8); //把鼠标放在该方法上面,如果出现的提示处的返回值类型不为void,则需要声明一个相应的数据类型变量接收调用该方法后的返回值,如果返回值类型为void,则说明该方法没有返回值,直接 类名.方法名 进行调用2.return
1.在方法中返回需要返回的数据 2.立即结束本次方法,即从该return语句直接跳到该方法的最后一个花括号处3.continue
结束本次循环,判断循环条件,继续下一次循环
4.out参数out参数侧重于在一个方法中返回多个不同类型的值
1.如果在一个方法中,需要返回多个相同数据类型的值,可以考虑返回一个数组 2.但是,如果返回多个不同类型的值的时候,就不能返回一个数组 3.可以考虑使用out参数 4.out参数侧重于在一个方法中返回多个不同类型的值(注意:out参数需要在方法内部对变量进行赋值,因为其需要在方法内直接调用变量值,并多余返回该变量的值)
当方法的参数列表为数组的时候,对数组改变可以不需要返回值也能传递到方法外,不需要返回值、out、ref参数
5.ref参数能够将变量带入方法中进行改变,改变完成后,再将改变后的值带出方法
1.能够将变量带入方法中进行改变,改变完成后,再将改变后的值带出方法 2.ref参数要求在方法外必须为其赋值,而方法内可以不赋值(其原因是ref参数需要将方法外的值带入方法进行计算并带出,所以在方法外需要对其进行赋值)6.params参数
能够将变量带入方法中进行改变,改变完成后,再将改变后的值带出方法
1.能够将变量带入方法中进行改变,改变完成后,再将改变后的值带出方法 2.ref参数要求在方法外必须为其赋值,而方法内可以不赋值(其原因是ref参数需要将方法外的值带入方法进行计算并带出,所以在方法外需要对其进行赋值)7.方法的重载
方法的重载就是指方法的名称相同,但是参数不同
参数不同分为两种情况: 1.如果参数的个数相同,那么参数的类型就不能相同 2.如果参数的类型相同,那么参数的个数就不能相同
方法的重载跟返回值类型以及是否有返回值没有关系。
8.方法的递归方法自己调用自己
1.注意需要设定条件(静态字段模拟全局变量)终止递归,不能死循环 例-找出一个文件夹中的所有文件,这个文件夹中还可能包括其它文件夹,这就要使用到方法的递归9.将数字保留几位小数
三位小数0.000
double number = 3.1415926;
string s = number.ToString("0.00"); //将字符串保留两位小数,从而使得原数字保留两位小数
number = double.Parse(s);
Console.WriteLine(number);
总结
提示:这里对文章进行总结:
例如:



