【笔记-C#】功能

  1. 基本数据类型转换

可以对基本类型做任意转换

string s = "12";

int i = Convert.ToInt32(s,10);

第二个参数默认10,代表10进制

  1. 字节操作
    1. 字节数组拷贝

Array.Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);

    1. 字节流

MemoryStream ms = new MemoryStream();

                预先分配指定大小new MemoryStream(1024*1000);

     

ms.Position = 0;//再次写入时从起始位置开始

//将每次获取的字节放入字节流       

byte[] data = new byte[10];

ms.Write(data, 0,len);//ms.Length获取当前字节流长度

                

=======将字节流转出

拷贝方式转出

byte[] result = ms.ToArray();

不进行拷贝

sendByte = ms.GetBuffer();

    1. 转换成数字

UInt32 datSize =  BitConverter.ToUInt32(recvBytes, POS_DATA_SIZE);

    1. 数字转成字节流

UInt32 datSize;

BitConverter.GetBytes(datSize);

    1. 字符解码

byte[] data = new byte[1024];

string str = Encoding.Default.GetString(data);//代表系统编码

str = Encoding.UTF8.GetString(data);

  1. 序列化

[Serializable]

class Dat

{

        public long   Id;

        public string Name;

        [NonSerialized]

        string age;//不进行序列化

        public Dat(long id, string name,string age)

        {

            this.Id = id;

            this.Name = name;

            this.age = age;

        }

        public override string ToString()

        {

            return string.Format("id:{0} name:{1} age:{2}", Id, Name, Name, age);

        }

}

            List<Dat> tests = new List<Dat>();

            tests.Add(new Dat(1, "aa", "111"));

            tests.Add(new Dat(2, "bb", "222"));

            tests.Add(new Dat(3, "cc", "333"));

            //序列化

            IFormatter serializer = new BinaryFormatter();

            FileStream saveFile = new FileStream("D:\\Test.dat", FileMode.Create, FileAccess.Write);

            serializer.Serialize(saveFile, tests);

            saveFile.Close();

        

            //反序列化

            FileStream loadFile = new FileStream("D:\\Test.dat", FileMode.Open, FileAccess.Read);

            List<Dat> tests2 = serializer.Deserialize(loadFile) as List<Dat>;

            foreach (Dat item in tests2)

            {

                Console.WriteLine(item);

            }

  1. 图像操作

FileStream fs = new FileStream("D:\\1.jpg", FileMode.Open);

Bitmap bmp = new Bitmap(fs);//new Bitmap("D:\\1.jpg")

Image image = Image.FromFile(imgPathName);

image = Image.FromStream(Stream);

  1. 类库

使用.NET中的任何类都是在使用外部程序集中的类,因为它们的处理方式是相同的。

创建类库项目,可以生成dll,让其他C#工程调用。

namespace ClassLibrary1  //该名称为生成的dll名

{

    public class AA

    {

        public void fun(){}

    }

}

在其他工程中,可以在解决方案中,右键引用,选择dll所在目录。

使用时:

using ClassLibrary1;

AA a = new AA();

a.fun();

  1. 调试信息

MessageBox.Show(string, "名称");

using System.Diagnostics;

Debug.WriteLine("xx"); 

  1. 时间

//using System.Data;

string s=DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss");

//设置一个3s的时间范围

TimeSpan span = new TimeSpan(0, 0, 3);

TimeSpan span = TimeSpan.FromSeconds(3);

int count = (int)span.TotalSeconds;//获取总的秒数

  1. 打开/关闭程序

using System.Diagnostics;

Process[] process = Process.GetProcessesByName("a");

if (process.GetLength(0) > 0)

{

     process[0].CloseMainWindow();

     process[0].Close();

}

else

{

   Process.Start("a.exe");

}

  1. Socket

客户端发送,服务端接收

//using System.Text;

using System.Net.Sockets;

using System.Net;

using System.Threading;

    1. 客户端

private Thread threadSocket = null;

private Socket sokClient = null;

private string localIP = "127.0.0.1";//服务器地址

private int localPort = 5555;//端口

private string sendStr="";//发送内容

void StartSocket()

{

IPAddress address = IPAddress.Parse(localIP);

IPEndPoint endpoint = new IPEndPoint(address, localPort);//把ip和端口转化为IPEndPoint实例

sokClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket

sokClient.Connect(endpoint);//连接到服务器

byte[] bs = Encoding.ASCII.GetBytes(sendStr);

sokClient.Send(bs, bs.Length, 0);//发送

}

    1. 服务端

private Thread threadSocket = null;

private Socket socketServer = null;

private string ip = "127.0.0.1";

private int port = 5555;

void Start()

{

    try

    {

       socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

       IPAddress address = IPAddress.Parse(ip);

       IPEndPoint endpoint = new IPEndPoint(address, port);

       socketServer.Bind(endpoint);

       threadSocket = new Thread(StartSocket);

       threadSocket.IsBackground = true;

       threadSocket.Start();

     }

     catch (Exception ex)

     {

     }

}

void StartSocket()

{

          socketServer.Listen(1);

          Socket temp = socketServer.Accept();     

     

          byte[] recvBytes = new byte[1024];

          bytes = temp.Receive(recvBytes, recvBytes.Length, 0);

          string recvStr = Encoding.ASCII.GetString(recvBytes, 0, bytes);

       }

 }

调用时:

Start();

  1. web
    1. GET请求

            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(reqstStr);

            req.Method = "GET";

            using (WebResponse wr = req.GetResponse())

            {

                Stream responseStream = wr.GetResponseStream();

                StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);

                string retString = streamReader.ReadToEnd();

            }

    1. POST请求

            string param = string.Format("userName={0}&passWord={1}", user, password);

            byte[] bs = Encoding.ASCII.GetBytes(param);

            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(reqstStr);

            req.Method = "POST";

            req.ContentType = "application/x-www-form-urlencoded";

            req.ContentLength = bs.Length;

            using (Stream reqStream = req.GetRequestStream())

            {

                reqStream.Write(bs, 0, bs.Length);

            }

            using (WebResponse wr = req.GetResponse())

            {

                Stream responseStream = wr.GetResponseStream();

                XmlDocument doc = new XmlDocument();

                doc.Load(responseStream);

            }

  1. 串口

using System.IO.Ports;

类内变量:

SerialPort serialPort1 = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);

    1. 打开

serialPort1.Open();

    1. 关闭

serialPort1.Close();

    1. 发送

======发送字符串

serialPort1.Write("xx");

======直接发送16进制byte数组

byte[] send = new byte[3];

send[0] = 0xae;

send[1] = 0x05;

send[2] = 0x12;

serialPort1.Write(send, 0, 3);

======将16进制字符串转换为byte数组发送

private static byte[] strToToHexByte(string hexString,ref int size)

{

      hexString = hexString.Replace(" ", "");

      if ((hexString.Length % 2) != 0)

                hexString += "";

      byte[] returnBytes = new byte[hexString.Length / 2];

      int i = 0;

      for (; i < returnBytes.Length; i++)

          returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);

      size = i;

      return returnBytes;

}

int size = 0;

byte[] send = strToToHexByte(str,ref size);//str为ae 01 03这种

serialPort1.Write(send, 0, size);

    1. 接收

serialPort1.DataReceived+=new SerialDataReceivedEventHandler(serialPort1_DataReceived);

/////////对应函数

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

     string s = serialPort1.ReadExisting();//接收串口的字符串

    //throw new NotImplementedException();自动生成的函数需要将这句注释掉,否则运行该句后程序会退出

}

十六进制接收:

public string byteToHexStr(byte[] bytes)

{

     string returnStr = "";

     if (bytes != null)

     {

         for (int i = 0; i < bytes.Length; i++)

         {

              returnStr += bytes[i].ToString("X2");

          }

      }

      return returnStr;

 }

使用时

int DataCount = serialPort1.BytesToRead;

byte[] ReCMD = new byte[DataCount];

serialPort1.Read(ReCMD, 0, DataCount);

string RecStr = byteToHexStr(ReCMD);

  1. 正则表达式

using System.Text.RegularExpressions;

===========字符条件判断

 string str = "scca";

 Regex reg = new Regex("^s.*a$");

 if (reg.IsMatch(str))

 {

     Console.WriteLine("满足条件");

 }

       Regex r = new Regex("abc");

            MatchCollection matches = r.Matches("123abc45abcd");

            foreach (Match match in matches)

            {

                Console.WriteLine("{0} found at pos {1}", match.Value, match.Index);

                string str = match.Result("$&_r");//将匹配结果加上_r返回字符串

            }

===========匹配内容

            var input = "this _is#  a _big _apple#";

            var pattern = @"_(\w+)#";//\w+表示一个单词(连续非特殊字符)     匹配句子中所有以_开头#结尾的单词   结果为is和apple         

           Match match = Regex.Match(input, pattern);

            while(match.Success)

            {

                Console.WriteLine(match.Groups[1].Value);

                match = match.NextMatch();

            }

            string input = "Born: July 12, 1010";

            //有三个括号,所以匹配出来后有三组外加总体的匹配字符

            string pattern = @"(\w+)\s(\d{1,2}),\s(\d{4})";

            Match match = Regex.Match(input, pattern);

            if (match.Success)

            {

                for (int ctr = 0; ctr < match.Groups.Count; ++ctr )

                {

                    Console.WriteLine("group {0}: {1}", ctr, match.Groups[ctr].Value);

                }

            }

===========替换

            //将匹配出的12.34前加上价格

            string pattern = @"\b\d+\.\d{2}\b";

            //\b代表单词边界  \d+代表多个数字  \.代表.  d{2}代表两个数字

            //匹配带小数点两位的数字

            string replacement = "价格$&";//$&代表匹配上的内容 $是特殊转义字符 输出$用$$

            string input = "apple: 12.34  banana: 6.5";

            Console.WriteLine(Regex.Replace(input, pattern, replacement));

==========拆分

            string input = "1.aa   2.bb   3.cc";

            string pattern = @"\b\d+\.";//匹配序号加.

            foreach(string item in Regex.Split(input,pattern))

            {

                if (!String.IsNullOrEmpty(item))

                    Console.WriteLine(item);

            }

  1. LINQ

实现IEnumerable的类都可以用linq

================LINQ查询

string[] arry = { "a1","a2","b1","b2","c"};

var query = from n in arry where n.StartsWith("a") select n;//LINQ语句

string str="";

foreach(var s in query){str += s;}

from n in arry类似foreach

where后是限定选择的条件

select字句是必须的,指定结果集中包含那些元素。

 int[] numbers = {3,5,2,5,12,5,36,75,42};

 var qur = from num in numbers where num % 2 == 0 orderby num descending select num;

//只有调用语句才会运行

//var qur = numbers.Where(n => n % 2 == 0).OrderBy(n => n);

  foreach (var i in qur) Console.WriteLine(i + "");

int[] ret = qur.ToArray<int>();  

================方法语句

var query = arry.Where(n=>n.StartsWith("a"));

var query = arry.Where(n=>n.Length==1);

================排序

var query = from n in arry where n.StartsWith("a") orderby n select n;

var query = arry.OrderBy(n=>n).Where(n=>n.StartsWith("a"));

var query = arry.OrderBy(n => n.Substring(n.Length - 1)).Where(n=>n.StartsWith("a"));//排序时,按照最后一个字符排

================聚合运算符

可以对查询结果进行分析。

int count=query.Count();

================let

            string[] strs = { "aA-11", "bb-22","cc" };

            var qur = from s in strs

                      let words = s.Split('-')

                      from word in words

                      let w = word.ToUpper()

                      select w;

            foreach (var s in qur)

                Console.WriteLine("{0}",s);

================分组与表连接

   class Customer

    {

        public string Name { get; set; }

        public string City { get; set; }

    }

    class Employee

    {

        public string Name { get; set; }

        public int ID { get; set; }

 }

List<Customer> cust = new List<Customer>();

cust.Add(new Customer() { Name="aa", City = "beijing" });

cust.Add(new Customer() { Name = "bb", City = "beijing" });

cust.Add(new Customer() { Name = "cc", City = "xian" });

List<Employee> em = new List<Employee>();

em.Add(new Employee() { Name = "aa", ID = 1 });

em.Add(new Employee() { Name = "dd", ID = 2 });

=========分组查询

 var quer = from c in cust

 group c by c.City;

foreach (var cg in quer)

 {

        Console.WriteLine(cg.Key);

        foreach (var c in cg)    Console.WriteLine(" " + c.Name);

}

            var quer = from c in cust

                       group c by c.City into custGroup

                       where custGroup.Count() >= 2

                       select new { City = custGroup.Key, number = custGroup.Count() };

            foreach (var c in quer)

                Console.WriteLine("{0} {1}", c.City,c.number);

============表连接

 var queryJoin = from c in cust

                         join e in em on c.Name equals e.Name

          select new { PersonName = c.Name, PersonID = e.ID, PersonCity = c.City };

foreach (var p in queryJoin)

      Console.WriteLine("{0} {1} {2}", p.PersonName, p.PersonID, p.PersonCity);

  1. 显示图片

Image控件显示图像

Uri uri = new Uri(@"D:\2.jpg", UriKind.RelativeOrAbsolute);

BitmapImage bim = new BitmapImage();

bim.BeginInit();  

bim.UriSource = uri;//从图片文件中加载

//bim.StreamSource = new MemoryStream(data);//从图像数据流加载

bim.EndInit();

img.Source = bim;//Image控件

GC.Collect();//释放资源

  1. 打开文件夹对话框

wpf需要添加dll引用(解决方案文件浏览中引用目录)

        System.Windows.Forms.FolderBrowserDialog fb = new System.Windows.Forms.FolderBrowserDialog();

            if (System.Windows.Forms.DialogResult.OK == fb.ShowDialog())

            {

                string path = fb.SelectedPath;      

            }

  1. 打开文件对话框

         var of = new Microsoft.Win32.OpenFileDialog() {  Filter = "jpg|*.jpg||"  };

            if (true == of.ShowDialog())

            {

                string file = of.FileName;

            }

  1. 限制输入数字

lvds1.PreviewTextInput += new TextCompositionEventHandler(EditPreviewTextInput

);

        void  EditPreviewTextInput(object sender, TextCompositionEventArgs e)

        {

            e.Handled = false;

            if (!isNumberic(e.Text))  e.Handled = true;           

        }

        public bool isNumberic(string _string)

        {

            if (string.IsNullOrEmpty(_string))

                return false;

            foreach (char c in _string)

            {

                if (!char.IsDigit(c))

                    return false;

            }

            return true;

        }

猜你喜欢

转载自blog.csdn.net/jiyanglin/article/details/81582955