首页 / Unity3d / C#

读一读

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();//创建这个文件
}



  1. 基于连接和无连接

  2. TCP对系统资源的要求高

  3. UDP程序结构较简单

  4. 流模式与数据报模式

  5. 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互相等待对方锁定的资源释放锁

此时就会产生死锁