当前位置:网站首页 / .NET CORE / 正文

ay的C#8.0和net5高级编程笔记8-使用常见的.NET类型

时间:2021年04月22日 | 作者 : aaronyang | 分类 : .NET CORE | 浏览: 250次 | 评论 0

处理复数

需要引入 using System.Numerics;

            var c1 = new Complex(42);
            var c2 = new Complex(37);
            var c3 = c1 + c2;
            System.Console.WriteLine($"{c1} + {c2} ={c3}");

image.png


NS中处理集合常用类型

IEnumerable,IEnumerable<T>

List<T> Dictionary<T> Queue<T> Stack<T>

BlockingCollection ConcurrentDictionary ConcurrentQueue 多线程场景中使用这些集合是安全的

ImmutableArray ImmutableDictionary ImmutableList ImmutableQueue  这些集合为原始集合的内容永远不会改变这种场景而设计的,尽管他们可以把修改后的集合创建为新的实例

更多的信息:https://docs.microsoft.com/zh-cn/dotnet/standard/collections/

我在这篇文章写到了一些集合的 知识:查看


所有集合实现了ICollection接口,IEnumerable接口


集合的排序

List<T>用Sort排序,每个item必须实现 IComparable,前面第6篇写过:查看

Dictionary<T>,Stack<T> Queue<T>不支持排序

可以排序的,SortedDIctionary<TKey,TValue>  按键顺序的 键值集合

SortedList<TKey,TValue> 基于相关的IComparer<TKey> 实现,表示按一组按键排序的 键/值队


不可变集合

           List<stringp = new List<string> { "杨洋""ay""大傻" };
            var pi = p.ToImmutableList();
            var newpi = pi.Add("杨志");
            foreach (var item in pi)
            {
                System.Console.Write(item + " ");
            }
            System.Console.WriteLine("");
            foreach (var item in newpi)
            {
                System.Console.Write(item + " ");
            }

image.png

更多的用法,参考我这篇博客

试过clear都是没用的

image.png



C#8.0   Span<T>, 索引Index,范围Range

索引类型标识位置

以前用这种

            List<stringp = new List<string> { "杨洋""ay""大傻" };
            int index=2;
            System.Console.WriteLine(p[index]); //输出大傻

现在增加Index类型

            var i1 = new Index(2);
            Index i2 = 2;//隐式转换
            var i3 = new Index(2fromEndtrue);  //是否从末尾开始数
            var i4 = ^5//用^符号表示 C#8.0 新增的

新增Range类型

            Range r1 = new Range(startnew Index(2), endnew Index(7)); //2 到 7
            Range r2 = new Range(start3end7); //隐式转换
            Range r3 = 3..7//3 到 7
            Range r4 = Range.StartAt(3); //3 到 最后
            Range r5 = 3..; //3 到 最后
            Range r6 = Range.EndAt(3); //0 到 3
            Range r7 = ..7//0 到 7

使用这两个

string name="Aaron yang";
int lengthofFirstName=name.IndexOf(' ');
System.Console.WriteLine(lengthofFirstName);
int lengthofLastName=name.Length-lengthofFirstName-1;
System.Console.WriteLine(lengthofLastName);
string firstName=name.Substring(0,lengthofFirstName);
string lastName=name.Substring(name.Length-lengthofLastName,lengthofLastName);
System.Console.WriteLine(firstName);
System.Console.WriteLine(lastName);

ReadOnlySpan<charnameAsSpan=name.AsSpan();
var firstnameSpan=nameAsSpan[0..lengthofFirstName];
var lastnameSpan=nameAsSpan[^lengthofLastName..];  //等同于var lastnameSpan=nameAsSpan[^lengthofLastName..^0];
System.Console.WriteLine(firstnameSpan.ToString()+"=="+lastnameSpan.ToString());

image.png

提示还有好多类型,喜欢研究的去研究

image.png


网络资源

using System.Net;

使用

System.Net                        Dns Uri Cookie WebClient IPAddress

System.Net                        FtpStatusCode FtpWebRequest FtpWebResponse

System.Net                        HttpSatusCode HttpWebRequest HttpWebResponse

System.Net.Http                HttpClient HttpMethod HttpRequestMessage HttpResponseMessage

System.Net.Mail                Attachment MailAddress MailMessage SmtpClient

System.Net.NetworkInformation IPStatus NetworkChange Ping TcpStatistics



            string url="http://www.ayjs.net/post/862.html?p=2021";
            var uri=new Uri(url);
            System.Console.WriteLine($"URL:{url}");
            System.Console.WriteLine($"Scheme:{uri.Scheme}");
            System.Console.WriteLine($"Port:{uri.Port}");
            System.Console.WriteLine($"Host:{uri.Host}");
            System.Console.WriteLine($"Path:{uri.AbsolutePath}");
            System.Console.WriteLine($"Query:{uri.Query}");

image.png

继续添加代码

IPHostEntry entry=Dns.GetHostEntry(uri.Host);
System.Console.WriteLine($"{entry.HostName} 有以下IP地址");
foreach (IPAddress address in entry.AddressList)
{
    System.Console.Write(address);
}

image.png


Ping服务器


try
{
    var ping=new System.Net.NetworkInformation.Ping();
    System.Console.WriteLine("ping");
    string url2="http://www.baidu.com";
    var uri2=new Uri(url2);
    PingReply reply=ping.Send(uri2.Host);
    System.Console.WriteLine($"{uri2.Host} -- {reply.Status}");
    if(reply.Status==IPStatus.Success){
        System.Console.WriteLine($"{reply.Address}--{reply.RoundtripTime}");
    }
}
catch (System.Exception ex)
{
    System.Console.WriteLine($"{ex.GetType().ToString()} says {ex.Message}");
}

image.png



www.ayjs.net

程序集信息

主要版本号:重大变化

次要版本号:非重大变化,包括新特性和bug修复

补丁:非重大错误修复


更新NuGet包,如果只希望接收bug修复,就只升级到最高的补丁版本,比如下面的命令

Update-Package Newtonsoft.Json-ToHighestMinor

后面的还有-ToHighestPatch

MINOR


为了遵循语义版本的控制规则,可以参考 http://semver.org



阅读程序集元数据

using System.Reflection;


           System.Console.WriteLine("程序集信息");
            Assembly assembly = Assembly.GetEntryAssembly();
            System.Console.WriteLine($"全名:{assembly.FullName}");
            System.Console.WriteLine($"地址:{assembly.Location}");
            var atrs = assembly.GetCustomAttributes();
            System.Console.WriteLine("特性:");
            foreach (var item in atrs)
            {
                System.Console.WriteLine(item.GetType());
            }

image.png

继续添加代码


            System.Console.WriteLine("程序集信息");
            Assembly assembly = Assembly.GetEntryAssembly();
            System.Console.WriteLine($"全名:{assembly.FullName}");
            System.Console.WriteLine($"地址:{assembly.Location}");
            var atrs = assembly.GetCustomAttributes();
            System.Console.WriteLine("特性:");
            foreach (var item in atrs)
            {
                System.Console.WriteLine(item.GetType());
            }

            var version = assembly.GetCustomAttribute<System.Reflection.AssemblyInformationalVersionAttribute>();
            System.Console.WriteLine($"version:{version.InformationalVersion}");

            var company = assembly.GetCustomAttribute<System.Reflection.AssemblyCompanyAttribute>();
            System.Console.WriteLine($"company:{company.Company}");

image.png


在core项目中,手动修改Company信息,方法如下

在.netcore中元数据定义在csproj中的

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <RuntimeIdentifiers>
      win10-x64;osx-x64;rhel.7.4-x64
    </RuntimeIdentifiers>
    <Version>1.3.0</Version>
    <Company>杨洋公司</Company>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Net.Http" Version="4.1.0-*" />
    <PackageReference Include="newtonsoft.json" Version="13.0.1" />
    <PackageReference Include="AY.Chap7.AyCommonShared" Version="1.0.0" />
  </ItemGroup>

</Project>

再次运行项目

image.png


.NET Core 仅支持单个应用程序域。


关于特性知识,跟NF一样的

接下来反射的一些知识,下面有些链接,可以查看

动态加载当前未引用的程序集

https://docs.microsoft.com/zh-cn/dotnet/standard/assembly/unloadability

动态执行代码

https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection.methodbase.invoke?view=net-5.0

动态生成新代码和程序集

https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection.emit.assemblybuilder?view=net-5.0



国际化代码

全球化和本地化


            CultureInfo gloablization = CultureInfo.CurrentCulture;
            CultureInfo localization = CultureInfo.CurrentUICulture;
            System.Console.WriteLine($"全球化:{gloablization.Name}--{gloablization.DisplayName}");
            System.Console.WriteLine($"本地化:{localization.Name}--{localization.DisplayName}");
            System.Console.WriteLine();
            //文化设置
            System.Console.WriteLine("en-US 美国  da-DK 丹麦 fr-CA 法国");
            var ci = new CultureInfo("en-us");
            CultureInfo.CurrentCulture = ci;
            CultureInfo.CurrentUICulture = ci;
            //考虑国际化,写下本地化的文本,考虑所有需要全球化的数据(日期格式,数字格式,排序文本行为)
            DateTime dateTime = new DateTime(2020323194521);
            int minute = (int)DateTime.Today.Subtract(dateTime).TotalMinutes;
            string money = "2123500";
            System.Console.WriteLine($"{0:dddd} {1:N0} {2:C}"dateTimeminutemoney);

设置文化为en-us,效果如下

image.png

设置da-DK

image.png

设置fr-CA

image.png


www.ayjs.net

推荐您阅读更多有关于“C#8.0core3,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

合肥科大智能常年招聘C# .NET CORE,vue前端,JAVA开发,有想换工作的私聊我AY唯一QQ:875556003和AY交流

抖音号:wpfui 工作是wpf,不接活,目前主要折腾maui

AYUI8社区版Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始,兴趣学习研究WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表