一、字符串
①长度、索引、切片、包含
string s = "我是一个字符串";
Console.WriteLine(s.Length);//输出长度7
Console.WriteLine(s.IndexOf("是"));//输出索引1
Console.WriteLine(s.Replace("是", "不是"));//后代前,输出“我不是一个字符串”
Console.WriteLine(s.Substring(4, 3));//切片输出“字符串”(第4开始长度为3)
Console.WriteLine(s.Substring(2));//切片输出“一个字符串”(第2开始到结束)
bool b= s.Contains("一个");//字符串s,是否含有 “一个”
bool b2=s.StartsWith("一个") ;// 字符串s,是否以 “一个”开头
bool b3=s.EndsWith("一个") ;// 字符串s,是否以 “一个”结尾
【字符串使用Contains需注意】
是mainString.Contains(subString),例子如下所示:
Console.WriteLine("P业务经理".Contains("P领域主管,P项目成员,P业务经理"));//返回False
Console.WriteLine("P领域主管,P项目成员,P业务经理".Contains("P业务经理"));//返回True
②拼接(★)
string s = "123";
string s2 = "456";
string s3 = $"{s}拼接{s2}";//$类似于Python的format
Console.WriteLine(s3);//输出 123拼接456
③删除、替换操作
string s = "abcd";
string result = s.Replace("c", "");//删除内容为c的字符,存于result
string result = s.Remove(2, 1); //删除索引从2开始,长度为1的字符,存于result
④判断是不是字母
string s = "abcd";
char.IsLetter(s[1]);
⑤劈分和前后消除
string s = "Hello,World,How,Are,You";
string[] words = s.Split(',');
Console.Write(words[1]);//输出World
string s = "aacsdna";
string news = s.Trim('a');
Console.Write(news);//输出csdn
二、数组和值类型
①数组
int[] nums = { 0, 1, 2, 2, 3, 0, 4, 2 };//题目数组
var list = new List<int>(nums); //静态数组→泛型列表
②值类型创建
float f = 3.14f;//浮点型赋值,加f
double d = 6.66;//双精度浮点数
string s = "123";
③强制转换
float f2 = (float)d;//数字转数字
int i = int.Parse(s);//字符转数字
string s2 = f.ToString();//数字转字符 其他ToArray等也是同理
byte[] s3 = Convert.ToByte(s2);//string转byte
④泛型列表【必须掌握】
⑤哈希表(字典)【必须掌握】
⑥哈希集合【必须掌握】
//1.列表去重
List<int> intlist = new List<int> { 1, 1, 2, 3, 4 };
HashSet<int> setlist = intlist.ToHashSet();//存放内容为1,2,3,4
//2.递归时加入重复值,起到过滤作用
HashSet<int> setlist2 = new HashSet<int> { 1, 2, 3, 4 };
setlist2.Add(1);//存放内容为1,2,3,4
⑦元组:快速交换
int a = 1;
int b = 100;
(a, b) = (b, a);//交换
Console.WriteLine(a);//100
Console.WriteLine(b);//1
三、布尔类型
bool b = true;//定义一个布尔类型
Console.WriteLine(true && false);//和运算,输出false
Console.WriteLine(true || false);//或运算,输出true
Console.WriteLine(!true);//非运算,输出false
四、switch语句
【旧语法】
int i = int.Parse(Console.ReadLine());//获取控制台输入存入i
switch(i)
{
case 1 :Console.WriteLine("i的值是1");
//其他要执行的语句
break; //不要漏写break
case 2 :Console.WriteLine("i的值是2");
//其他要执行的语句
break;
default:Console.WriteLine("i的值是其他");
//其他要执行的语句
break;
}
【新语法】
class MainClass
{
public static string Method(int a)
{
string result = true switch
{
_ when a == 1 => "入参是1",
_ when a == 2 => "入参是2",
_ when a == 3 => "入参是3",
_ => "入参是其他"
};
return result;
}
static void Main(string[] args)
{
var result = Method(5);
Console.WriteLine(result);
}
}
五、enum枚举
public enum AssistType
{
Symbol = 0,
Formula = 1,
Chart = 2,
}
static void Main(string[] args)
{
string name = Enum.GetNames(typeof(AssistType))[2];//索引2 => 枚举名
string name2 = AssistType.Formula.ToString();//枚举名=>枚举名(enum=>string)
int index = AssistType.Formula.GetHashCode();//枚举名 => 索引
Console.WriteLine(name);
Console.WriteLine(name2);
Console.WriteLine(index);
/* 输出结果:
Chart
Formula
1 */
}
六、问号用法(三元/可空)
static void Main(string[] args)
{
//1.有关空
string text = null;//text不为空才点出Length,如果为空则输出123
Console.WriteLine(text?.Length.ToString() ?? "123");
//2.三元运算符
string result = (text == "1") ? "text等于1" : "text不等于1";
Console.WriteLine(result);
}
九、文件读写
//文件写
string filePath = @"D:\C_program\test\testresult\testresult.txt";//@代表对后面斜杠转义
string message = "helloworld";
using (StreamWriter writer = new StreamWriter(filePath, true)) //true代表追加内容,false代表覆盖内容
{
writer.WriteLine(message);
}
//文件读
string filePath = @"D:\C_program\test\testresult\testresult.txt";
using (StreamReader streamReader = new StreamReader(filePath))
{
string text = streamReader.ReadToEnd();
Console.WriteLine(text);
}
十、一个方法多个返回值
十一、多线程
class Program
{
static bool flag = true;
static void Main()
{
Thread thread = new Thread(() => PrintMessage());//将方法PrintMessage放进线程中(将方法作为参数代入,本质是委托)
thread.Start();//线程开始
}
static void PrintMessage()
{
while (flag)//只要flag标志为真,就一直执行这个方法
{
;//具体代码逻辑
Thread.Sleep(5000);//延迟5s执行
}
}
}
十一、判断入参类型
public object GetTypeCode(object obj)
{
if (obj is float)//如果传参是浮点型
{
return "abc";//返回字符串abc
}
else if (obj is double)//如果传参是双精度浮点型
{
return 2;//返回整型2
}
else
{
// 如果传入的类型不是float或double,则返回null或其他你认为合适的值
return null;
}
}
十二、拓展方法
【注意】不要和原有方法重名,否则优先执行原有方法!
public static class ExpandMethod//扩展方法类名是任意起的,public static固定不变
{
public static bool EqualsAAA(this String data)//方法名是任意起的,public static固定不变,第一个参数是:this+被扩展类型+内容参数
{ //若有入参(this String data,int a,sting b)
if (data.Equals("AAA"))
{
return true;
}
return false;
}
}
class MainClass//新建一个类,在这个类中可调用写好的扩展类下的扩展方法
{
static void Main(string[] args)
{
Console.WriteLine("a".EqualsAAA());//调用扩展方法,返回False
Console.WriteLine("as".EqualsAAA());//返回False
Console.WriteLine("AAA".EqualsAAA());//返回True
}
}