c# 学习总结

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值