String转Enum类型
//使用Enum的静态方法 Parse(枚举类型,要转换的字符串) UIPanelType type = (UIPanelType) Enum.Parse (typeof(UIPanelType), panelTypeString);
Enum转String
/使用Enum的静态方法GetName(枚举类型,要转换的枚举) string name = Enum.GetName (typeof(UIPanelType), UIPanelType.shopPanel); string name2 = UIPanelType.bagPanel.ToString ();
Enum类实在System命名空间下的
string filePath = "装备信息.xls";//XML文件 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";//链接字符串固定 OleDbConnection connection = new OleDbConnection(strConn);//创建链接 connection.Open();//链接 string sql = "select * from [Sheet1$]";//sql语句 OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);//去指定链接中查询sql语句,用来查询的类 DataSet data = new DataSet();//用来存储数据的类,在System.Data空间中 adapter.Fill(data);//将查询到的数据填充到DataSet里 connection.Close();//关闭链接 DataTable table = data.Tables[0];//获取第一个表的数据 DataRowCollection rowCollection = table.Rows;//获取这个表的所有行数据 foreach (DataRow row in rowCollection) {//遍历每一行 for (int i = 0; i < 8; i++) { Console.Write(row[i]+" ");//通过索引访问列值 } Console.WriteLine(); Console.WriteLine(row["描述"]);//通过字段名访问 }
OleDb相关的类在System.Data.OleDb命名空间下
其他相关存储数据的在System.Data命名空间下,DataSet,DataTable,DataRowCollection,DataRow等
{ "employees": [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName":"Carter" } ] }
花括号表示对象,方括号表示数组
键值对中 "键":value
<note time="1997-12-11"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
这里没有 <?xml version="1.0" encoding="UTF-8"?>
也可以被C#解析出来,有xml的时候,它就是第一个节点
File.WriteAllText("文件路径","我是写入的数据"); File.WriteAllLines("文件路径",字符串数组);//每一个数组运元素写成一行 File.WriteAllBytes("文件路径",byte数组);
DirectoryInfo directoryInfo = new DirectoryInfo(@"D:\vs project\Study\Study3\bin\Debug\chicai"); Console.WriteLine(directoryInfo.Exists);//文件夹是否存在 Console.WriteLine(directoryInfo.Name);//文件名称 Console.WriteLine(directoryInfo.Parent);//文件夹的上级目录 Console.WriteLine(directoryInfo.Root);//文件夹的根目录 directoryInfo.CreateSubdirectory("chifan");//创建子文件夹 DirectoryInfo dir = new DirectoryInfo("cc"); if (!dir.Exists) { dir.Create();//创建文件夹 }
同样的在System.IO命名空间下
FileInfo类在命名空间System.IO下
FileInfo fileInfo = new FileInfo("1.txt"); Console.WriteLine(fileInfo.Name);//文件名称 Console.WriteLine(fileInfo.FullName);//文件完整的路径 fileInfo.CopyTo("2.txt");//复制到指定路径文件 fileInfo.MoveTo("3.txt");//移动文件到指定位置和修改名称 FileInfo file = new FileInfo("6.txt"); if (!file.Exists) {//判断文件是否存在 file.Create();//创建这个文件 }
基于连接和无连接
TCP对系统资源的要求高
UDP程序结构较简单
流模式与数据报模式
TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证
if (socket.Connected) { if (socket.Poll(1, SelectMode.SelectRead)) { socket.Close(); break; } try { int length = socket.Receive(data); string mes = Encoding.UTF8.GetString(data, 0, length); ClientManager.GetInstance().BroadcastMessage(mes); Console.WriteLine(mes); } catch (Exception e) { Console.WriteLine("断开链接"); } }
socket.Connected 表示获取上次连接的状态
假如现在有那么两个对象a和b
线程1 先lock(a) 再 lock(b)
线程2 先lock(b) 再 lock(a)
那么,有可能会发生,线程1和2都运行到第一个锁,也就是说线程1锁住了a,线程2锁住了b
再往下执行,线程1想要锁住b,但是被线程2锁了,等待
线程2想要锁住a,但是被线程1锁了,等待
线程1和线程2互相等待对方锁定的资源释放锁
此时就会产生死锁