1. 文本文件读写
using System.Runtime.Serialization.Formatters.Binary;
Person person = new Person();
person.ID = 1;
person.Name = "大强";
person.Age = 18;
using (FileStream fwrite = new FileStream(@"C:/Users/Hobbit/Desktop/a.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
BinaryFormatter bf= new BinaryFormatter(); //将文件流转换为二进制
bf.Serialize(fwrite, person);
}
Console.WriteLine("序列化写入成功!");
Console.ReadKey();
using (FileStream fread = new FileStream(@"", FileMode.OpenOrCreate, FileAccess.Read))
{
BinaryFormatter bf = new BinaryFormatter();
Person p1 = (Person)bf.Deserialize(fread);
}
Console.WriteLine("序列化读取成功!");
Console.ReadKey();
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
2.图片处理
文件转成流:
传入参数:IFormFileCollection files
Stream stream = files[0].OpenReadStream();
字节转成流:
Stream stream = new MemoryStream(wtmFile.FileData);
流转成字节:
//加水印
Image image = ImageSharpOpreation(stream, text, out format);
var savePath = _webHostEnvironment.WebRootPath + "\\" + Guid.NewGuid() + wtmFile.FileName;
image.Save(savePath);
//返回图片(流转成字节)
FileStream fileStream = new FileStream(savePath, FileMode.Open, FileAccess.Read);
byte[] fileBytes = new byte[fileStream.Length];
fileStream.Read(fileBytes, 0, fileBytes.Length);
fileStream.Close();
System.IO.File.Delete(savePath);
return File(fileBytes, contentType, wtmFile.FileName ?? string.Empty);
3.图片加水印
/// <summary>
/// imagesharp 操作图片,添加水印
/// </summary>
private Image ImageSharpOpreation(Stream stream, string text, out IImageFormat format)
{
Image image = Image.Load(stream, out format);
var fontFilePath = $"{_webHostEnvironment.WebRootPath}\\font\\simfang.ttf";
FontCollection fontCollection = new();
FontFamily fontFamily = fontCollection.Add(fontFilePath);
Font font = fontFamily.CreateFont(32);
TextOptions textOptions = new TextOptions(font)
{
Origin = new PointF(image.Width / 2, 15),
TabWidth = 1,
WrappingLength = 300,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
IBrush brush = Brushes.Horizontal(Color.Black, Color.Blue);
IPen pen = Pens.DashDot(Color.Coral, 1);
image.Mutate(x => x.DrawText(textOptions, text, brush, pen));
return image;
}
4.泛型约束
引用类型:where T:class
值类型:where T:struct
带有构造函数的引用类型和值类型:where T : new()
自定义约束,只能传递B类型或者继承B类型: where T : B
约束多个接口:where T : B,AA,AA1
多个参数中每个参数都有一个或者多个约束:
A5<B, AA, C>(); //D调用
static void A5<T, T1, T2>()
where T : B
where T1 : AA
where T2 : C
{}
5.事件发布者和订阅者模式
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
NumEventArgs eventArgs = new NumEventArgs();
eventArgs.Num = 1;
//事件只能用+=和-=绑定
publisher.OnNumChange += new EventHandler<NumEventArgs>(subscriber.NumberChangeEvent);
publisher.InvokeEvent(eventArgs);
Console.ReadKey();
public delegate void NumCountChange(int num);
//事件发布者
public class Publisher
{
//public NumCountChange NumChangeDelegate;
public event EventHandler<NumEventArgs> OnNumChange; // EventHandler是c#已经封装好的事件类型
public int count { get; set; } = 0;
public void InvokeEvent(NumEventArgs e)
{
if (OnNumChange != null)
{
count++; //可以用来计算事件绑定了多少方法
OnNumChange.Invoke(this, e);
}
}
}
//事件订阅者
public class Subscriber
{
public void NumberChangeEvent(object sender, NumEventArgs e)
{
Console.WriteLine($"Subscriber the changed number is {e.Num}");
}
}
public class NumEventArgs : EventArgs
{
public int Num { get; set; }
}
6.异步获取百度api接口数据
string api = $"https://api.map.baidu.com/geocoding/v3/?address={深圳华强北}&output=json&ak={xRDYorKgLcPyx52tRBsy9DhF7jQ3xCK0}";
HttpClient hc = new HttpClient();
var responseBody = await hc.GetStringAsync(api);
MapResult jsonObj = JsonSerializer.Deserialize<MapResult>(responseBody);
location = jsonObj?.result?.location?.lng?.ToString() + "," + jsonObj?.result?.location?.lat?.ToString();
7.分组之后每组的多个主管名字字符串用逗号拼接成1个字符串
SELECT
ID,
GroupName AS GroupName,
MAX(ProjectID) AS ProjectID,
MAX(OrgID) AS OrgID,
MAX(Remark) AS Remark,
MAX(ProjectName) AS ProjectName,
MAX(OrgName) AS OrgName,
MAX(PeopleID) AS PeopleID,
--MAX(DirectorName) AS DirectorName,
DirectorName = stuff((
SELECT ',' + e.PeopleName
FROM dbo.BelongGroupList t, dbo.GroupMenu m, GYPlateFormMain.BASE.E6PeopleNew e
WHERE t.GroupID=m.ID AND t.PeopleID=e.PeopleID AND m.GroupName=r.GroupName AND t.Node=0
and t.IsVaild=1 and m.IsVaild=1 and e.isvalid=1
FOR xml path('')) , 1 , 1 , ''),
MAX(GroupLeaderName) AS GroupLeaderName,
MAX(PeopleName) AS PeopleName,
MAX(CreatedTime) AS CreatedTime
FROM ( SELECT gm.ID,
gm.GroupName,
gm.ProjectID,
gm.OrgID,
gm.Remark,
gm.CreatedTime,
pro.ProjectName,
oz.OrgName,
bg.PeopleID,
bg.Node,
CASE bg.node WHEN 0 THEN pn.PeopleName END AS DirectorName,
CASE bg.node WHEN 1 THEN pn.PeopleName END AS GroupLeaderName,
pn.PeopleName
FROM dbo.GroupMenu gm
LEFT JOIN dbo.BelongGroupList bg on bg.GroupID = gm.ID
LEFT JOIN GYPlateFormMain.BASE.E6PeopleNew pn on pn.PeopleID = bg.PeopleID
LEFT JOIN GYPlateFormMain.BASE.E6Organization oz on gm.OrgID = oz.OrgID
LEFT JOIN GYPlateFormMain.BASE.E6Project pro on gm.ProjectID = pro.ProjectID
WHERE gm.ProjectID = 55
AND gm.IsVaild = 1
AND bg.IsVaild = 1
AND bg.Node in(0,1)
) AS r
GROUP BY ID, GroupName
Order by ID asc