TryParse
cs
int x;
bool b = int.TryParse("100", out x);
Console.WriteLine(b);
格式转换
cs
//浮点型转decimal,必须强转
double f = 0.1;
decimal m = (decimal)f;
//转float是ToSingle
Convert.ToSingle(f);
DateTime d = DateTime.Now;
Console.WriteLine(d.ToString("yyyy-MMMM-dddd"));
空值
可以判断三种情况,长度 text1.length == 0,会分配空间
==或equals默认只能比较"值类型"或"字符串"类型,不能比较对象类型
equals,不区分大小写
string属于引用类型,需要当值类型来使用
cs
string text1 = "";
string text2 = string.Empty;
空对象
没有长度,不会分配空间
cs
string text2 = null;
字符串拼接(StringBuilder)

cs
StringBuilder sb = new StringBuilder("本周课程信息:");
string message = "语文";
sb.AppendFormat($"周一:{message}");
string str = sb.ToString();
Console.WriteLine(str);//本周课程信息:周一:语文
转义字符
在App.config文件中,不需要转义,读取字符串,\ 打断点的时候会自动变成 \\
字符串分割、连接、替换
cs
string str = "AB EF HU 00";
string[] s = str.Split();//默认空格分割
str = string.Join("_", s);
Console.WriteLine(str);
Console.WriteLine(string.Join("+",s));
Console.WriteLine(str.Replace(' ','_'));
只读自动属性
自动属性:编译器自动生成
get
和set
访问器及其背后的字段,不需要显式地写出这些代码编译器为自动属性创建一个隐藏的私有字段,并且你无法直接访问该字段
cs
public Classroom()
{
a = 20;
}
public int a{get;} = 10;
只读字段
cs
private readonly int id = 10;
public Classroom()
{
id = 20;
}
构造器复用
cs
public A(int a,int b)
{
this.a = a;
this.b = b;
}
public A(int a,int b,int c):this(a,b)
{
this.c = c;
}
对象(属性)初始化器
只能初始化属性,可以和构造器配合使用
cs
Student s = new Student()
{
id = 1;
name = "tom";
};
泛型
List<T>
集合赋值,不能直接new_list = old_list,都是指向同一个地址
cs
List<string> old_list = new List<string>();
List<string> new_list = new List<string>(old_list);
集合、数组转换,ToList()、ToArray()
list.AddRange(array);将数组直接添加到集合
list.RemoveAt(2);按照索引删除
Dictionary<K,V>
初始化,通过key获得对象,遍历key,遍历value
cs
Dictionary<string, Student> s = new Dictionary<string, Student>
{
["first"] = new Student("tom", 1),
["second"] = new Student("jack", 2)
};
Console.WriteLine(s["first"]);//输出的是对象
Console.WriteLine(s["first"].name);
foreach (string item in s.Keys)
Console.Write(item + " ");
Console.WriteLine();
foreach (Student item in s.Values)
Console.Write(item.ToString() + " ");
事件
1、定义事件 2、处理事件 3、关联事件
单击一个按钮,就输出对应的一段话


可以在属性Tag存数据,从sender取出来


优化
会先把控件加到Controls集合中

要选择三个按钮,根据Tag判断,加上btn_

遍历Controls集合,可能其他控件的Tag为空,加判断
cs
public Form1()
{
InitializeComponent();
//this.btn1.Click += new System.EventHandler(this.btn_Click);
//this.btn2.Click += new System.EventHandler(this.btn_Click);
//this.btn3.Click += new System.EventHandler(this.btn_Click);
foreach(Control item in Controls)
{
if(item.Tag != null && item.Tag.ToString().Contains("btn_"))
{
item.Click += new System.EventHandler(this.btn_Click);
}
}
}
private void btn_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
MessageBox.Show($"{btn.Text} {btn.Tag.ToString()}");
}
新增两个按钮,关联事件,移除事件
cs
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Event(true);
}
public void Event(bool isAdd)
{
foreach (Control item in Controls)
{
if (item.Tag != null && item.Tag.ToString().Contains("btn_"))
{
if (isAdd)
item.Click += new System.EventHandler(this.btn_Click);
else
item.Click -= new System.EventHandler(this.btn_Click);
}
}
}
private void btn4_Click(object sender, EventArgs e)
{
Event(true);
}
private void btn5_Click(object sender, EventArgs e)
{
Event(false);
}
private void btn_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
MessageBox.Show($"{btn.Text} {btn.Tag.ToString()}");
}
ShowDialog
ShowDialog关闭后有返回值
在旧窗体中点击按钮开启新窗体
cs
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
DialogResult result = f.ShowDialog();
if(result == DialogResult.OK)
{
MessageBox.Show(f.Tag.ToString());
}
}
在新窗体中点击按钮关闭新窗体
cs
private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Tag = "123";
this.Close();
}