本篇博客对应视频讲解

前言

前几篇文章及对应视频是带大家快速体验了一下C#,了解编程语言最基础的内容及面向对象的概念。 接下来我会进一步演示和说明C#还能做些什么。

实际上,C#就一门语言来讲,除去面向对象的概念,以及我们前面讲的内容(类型、数值计算、分支循环等),基本也就差不多了。以下的内容,与其说是C#的内容,不如说是.Net平台提供的功能。这也就意味着,当你使用其他依赖.Net平台的语言时(VB,F#等),你都可以做到相应的操作。

先给大家一个提纲,总览接下来要讲解的内容。

提纲

  1. 格式处理:字符串处理(正则)、时间格式处理、常用类型转换处理
  2. 文件操作:如何创建、读取、删除文件及文件夹等操作。
  3. 编码操作:不同编码之间的转换。
  4. Linq查询语言:如何优雅一致的处理一组对象。
  5. 网络请求:http请求,tcp连接,socket
  6. 线程处理:多线程处理
  7. 异步处理:如何方便优雅的使用异步
  8. 序列化处理:包括解析Json,Xml(html)格式内容
  9. 数据库操作:连接数据库,数据库读写操作

格式处理

现实世界远比我们想象的复杂,不同国家、宗教、人种、民族等等,文化都不尽相同。所以,想要使用程序描述我们的世界也是不容易的。我们从现实中获取的信息,存储到计算机中,就需要转换成计算机可识别的内容。我们需要在人机之中寻找平衡。这就需要类型转换和格式处理。今天我们就来简单说明一下格式处理。

类型转换

在我们的生活中,我们并不会区分什么类型,人与人之间就是通过文字或通话,这些都可以当做"字符串"。 只是不同的词可能表达了不同的含义。在有类型的语言中,为了优化或精准的进行某些计算操作,所以将一些常用的类型进行区分。所以,很多时候,我们需要把人类写的文字或说的话,即字符串,转换成其他的类型,然后再做进一步的处理。

关于类型转换的内容,可以查看官方文档。这里只是说明了隐匿转换和显示(强制)转换。

实际上,C#中,不同的类型都对应着不同的类。比如Int,String,Long,Byte,DateTime等等,当我们想要进行转换的时候都可以在相应的类中找到相关的方法。

同时我们还有Convert类的帮助,以帮助我们进行更多转换的需求。这些内容可通过以下链接,或通过我们的教学视频中的演示去学习。

示例代码:

int a = 13;
double b = 2.13; //显示转化
var b1 = (int)b;
//判断类型
if (b1 is int)
{
Console.WriteLine("(int)b的类型为:" + b1.GetType().Name + ",值为:" + b1);
}
else
{
Console.WriteLine($"{b}=>{b1}");
} //字符串转数字
Console.WriteLine(int.Parse("14"));
Console.WriteLine(double.Parse("13.5")); //使用Convert类
Console.WriteLine(Convert.ToInt32("14"));
Console.WriteLine(Convert.ToDouble("13.5"));

字符串处理

关于字符串相关的内容,可参考官方文档。我在此没必要一一列举,我在视频中会通过一些示例进行讲解。 在我们看文档及视频时,尝试理解以下知识点:

  1. 字符串对象的不可变性
  2. 转义字符的使用。
  3. 使用Format格式化字符串.
  4. 使用下标方式访问字符串的某个字符。即字符串可当做字符数组来使用。
  5. StringBuilder的作用。

NET 中的字符串操作进行了高度的优化,在大多数情况下不会显著影响性能。 但是,在某些情况下(例如,执行数百次或数千次的紧密循环),字符串操作可能影响性能。 StringBuilder 类创建字符串缓冲区,用于在程序执行多个字符串操控时提升性能。 使用 StringBuilder 字符串,还可以重新分配各个字符,而内置字符串数据类型则不支持这样做。 6. 正则匹配搜索。 经常用来判断格式(手机、身份证号、邮箱等)是否正确,以及匹配特定的内容。 格式参考 最佳实践

相关的代码示例:

           //字符串转义文档: https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/strings/#string-escape-sequences
string output = "hello NilTor,\nWelcome to Msdev.cc!\n\tThank you!";
Console.WriteLine(output);
output = "\"类\"的概念";
Console.WriteLine(output); Console.WriteLine("我的名字是{0}", "NilTor");
output = String.Format("你好,{0}", "NilTor");
Console.WriteLine(output); //字符串当做字符数组使用
output = "零一二三四五";
for (int i = 0; i < output.Length; i++)
{
Console.WriteLine(string.Concat(i, ":", output[i]));
} //更加灵活的字符串处理 StringBuilder
// 文档链接:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/strings/#using-stringbuilder-for-fast-string-creation
var sb = new StringBuilder("MilTor");
//output[0] = "佰"; //只读不可更改
sb[0] = 'N';
sb.Append(". Nice to meet you");
sb.Insert(0, "Hello ");
Console.WriteLine(sb.ToString()); //正则匹配
//文档链接:https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-language-quick-reference
//1 判断格式
string phone = "13890902211";
string pattern = @"\d{11}";
if (Regex.IsMatch(phone, pattern))
{
Console.WriteLine($"{phone} 符合手机格式");
}
else
{
Console.WriteLine($"{phone} 格式错误");
}
//2 匹配特定内容
string sites = "我们官方网站的网址是:https://msdev.cc,欢迎访问";
// 分组匹配
pattern = @"://(?<websites>\w+\.\w+),";
// 匹配
var match = Regex.Match(sites, pattern);
// 输出匹配的内容
Console.WriteLine(match.Groups["websites"].Value);

时间格式处理

在现实生活中,我们对日期时间基本是不需要什么思考的,因为我们通常只识别一两种我们常用的时间格式,但在计算机中,由于世界各地不同语言下,时间的表示都不一样,就有很多内容可讲了。

  1. 日期时间的表达方式及常用方法 DateTime Api TimeSpan Api
  2. 日期的格式化显示
  3. 日期之间的计算
  4. 时区

相关的代码示例:

//日期格式处理
//创建时间
var dateTime = DateTime.Now;//当前日期
Console.WriteLine("当前时间:" + dateTime.ToString()); //字符串转化到日期
//标准格式的转化
string date = "2017/11/12";
Console.WriteLine(DateTime.Parse(date).ToString()); date = "2017-12-12 13:22:20";
Console.WriteLine(DateTime.Parse(date).ToString()); //自定义格式转化
date = "12月20号,下午3点";
Console.WriteLine(DateTime.ParseExact(date, "MM月dd号,tth点", CultureInfo.CreateSpecificCulture("zh-cn"))); //日期计算
//三年前的今天是星期几?
dateTime = dateTime.AddYears(-3);
Console.WriteLine("三年前的今天是:" + dateTime.DayOfWeek);
//ddd:周几 dddd:星期几
Console.WriteLine("三年前的今天是:" + dateTime.ToString("dddd"));

以上内容有很多,实际上我们最常用的,大家只需要记住DateTime类就可以了。而在有其他需求的时候,就可以去查阅相关的文档即可。

4-C#格式处理的更多相关文章

  1. 日期格式代码出现两次的错误 ORA-01810

    错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...

  2. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  3. excel 日期/数字格式不生效需要但双击才会生效的解决办法

    原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...

  4. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  5. System.Guid ToString五中格式

    参考:https://msdn.microsoft.com/en-us/library/97af8hh4.aspx 测试代码: using System; using System.Collectio ...

  6. WebApi返回Json格式字符串

    WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...

  7. 你所能用到的BMP格式介绍

    原理篇: 一.编码的意义. 让我们从一个简单的问题开始,-2&-255(中间的操作符表示and的意思)的结果是多少,这个很简单的问题,但是能够写出解答过程的人并不 多.这个看起来和图片格式没有 ...

  8. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  9. Lind.DDD.LindMQ~关于持久化到Redis的消息格式

    回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...

  10. iOS之判断手机号码、邮箱格式是否正确

    //判断手机号码格式是否正确 + (BOOL)valiMobile:(NSString *)mobile{     mobile = [mobile stringByReplacingOccurren ...

随机推荐

  1. tensorflow下载和安装

    下载以及安装 选择类型 必须选择以下类型的TensorFlow之一来安装: TensorFlow仅支持CPU支​​持.如果您的系统没有NVIDIA®GPU,则必须安装此版本.请注意,此版本的Tenso ...

  2. Pthreads Hello World,忙等待,互斥量

    ▶ 一个简单的 Pthreads 程序(不按照<并行程序设计导论>中的程序来写) ● 代码 #include <stdio.h> #include <pthread.h& ...

  3. FireDAC 汉字字段名称过滤

    [FireDAC][Stan][Eval]-107. Invalid character found [ 拼音码 like '%A%' ] 英文字段名称过滤正常 汉字字段名过滤报错. 莫非不支持汉字字 ...

  4. Guide to installing 3rd party JARs

    Although rarely, but sometimes you will have 3rd party JARs that you need to put in your local repos ...

  5. eclipse双击变量高亮显示开关

    在eclipse/myeclipse中如果不小心把变量的高亮显示弄丢了.可真是件愁人的事,不过看到这你就不用愁了 windows->   preferences-> java-> E ...

  6. 【327】Python 中 PIL 实现图像缩放

    参考:Python 中使用PIL中的resize 进行缩放 参考:Python用Pillow(PIL)进行简单的图像操作(模糊.边缘增强.锐利.平滑等) 参考:廖雪峰 - Pillow 实现代码如下: ...

  7. Sqlserver filestream 引发文件数剧增

    如果不使用checkpoint,文件数会剧增 参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/logs/database-ch ...

  8. Multithread之为什么spinlock必须是volatile?

    [Multithread之为什么spinlock必须是volatile?] 1.编译器的优化 在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中:以后再取变量 ...

  9. python将url转换成二维码

    准备环境 python生成二维码,需要依赖包qrcode和PIL(二维码的实质就是一个url.) python3安装PIL:pip install PIL python2安装PIL:pip insta ...

  10. JSONArray的初始化的形式

    1 转义字符形式 [    {        \"ID\": \"1900036295\",        \"DEPT\": \" ...