- 基本数据类型转换
可以对基本类型做任意转换
string s = "12";
int i = Convert.ToInt32(s,10);
第二个参数默认10,代表10进制
- 字节操作
- 字节数组拷贝
Array.Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
-
- 字节流
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();
-
- 转换成数字
UInt32 datSize = BitConverter.ToUInt32(recvBytes, POS_DATA_SIZE);
-
- 数字转成字节流
UInt32 datSize;
BitConverter.GetBytes(datSize);
-
- 字符解码
byte[] data = new byte[1024];
string str = Encoding.Default.GetString(data);//代表系统编码
str = Encoding.UTF8.GetString(data);
- 序列化
[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);
}
- 图像操作
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);
- 类库
使用.NET中的任何类都是在使用外部程序集中的类,因为它们的处理方式是相同的。
创建类库项目,可以生成dll,让其他C#工程调用。
namespace ClassLibrary1 //该名称为生成的dll名
{
public class AA
{
public void fun(){}
}
}
在其他工程中,可以在解决方案中,右键引用,选择dll所在目录。
使用时:
using ClassLibrary1;
AA a = new AA();
a.fun();
- 调试信息
MessageBox.Show(string, "名称");
using System.Diagnostics;
Debug.WriteLine("xx");
- 时间
//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;//获取总的秒数
- 打开/关闭程序
using System.Diagnostics;
Process[] process = Process.GetProcessesByName("a");
if (process.GetLength(0) > 0)
{
process[0].CloseMainWindow();
process[0].Close();
}
else
{
Process.Start("a.exe");
}
- Socket
客户端发送,服务端接收
//using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
-
- 客户端
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);//发送
}
-
- 服务端
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();
- web
- 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();
}
-
- 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);
}
- 串口
using System.IO.Ports;
类内变量:
SerialPort serialPort1 = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
-
- 打开
serialPort1.Open();
-
- 关闭
serialPort1.Close();
-
- 发送
======发送字符串
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);
-
- 接收
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);
- 正则表达式
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);
}
- 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);
- 显示图片
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();//释放资源
- 打开文件夹对话框
wpf需要添加dll引用(解决方案文件浏览中引用目录)
System.Windows.Forms.FolderBrowserDialog fb = new System.Windows.Forms.FolderBrowserDialog();
if (System.Windows.Forms.DialogResult.OK == fb.ShowDialog())
{
string path = fb.SelectedPath;
}
- 打开文件对话框
var of = new Microsoft.Win32.OpenFileDialog() { Filter = "jpg|*.jpg||" };
if (true == of.ShowDialog())
{
string file = of.FileName;
}
- 限制输入数字
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;
}