本篇博客对应视频讲解

前言

前几篇文章及对应视频是带大家快速体验了一下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. Phython智能分词开发

    Git/GitHub 一.开发环境安装 1.安装Anaconda 官方下载地址:https://www.anaconda.com/download/ Anaconda自带Flask 2.安装模块/插件 ...

  2. Seetaface 向树莓派 移植

    seetaface由中科院计算所山世光研究员带领的人脸识别研究组研发.代码基于C++实现,不依赖第三方库.然而,目前开源的代码,是在windows vs上编译的,对于我们这帮mac/linux用户来说 ...

  3. zk分布式锁-排它锁简单实现

    package Lock; import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;import ...

  4. Openstack 组件简介

    1. Nova 计算服务: 负责承载和管理云计算系统 其中nova-compute service 通过调用Hypervisor APIs创建和终止虚拟机实例. 虚拟化技术: KVM和Xen 2. N ...

  5. Fragment生命周期(转)

    Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕要比手机的大得多,有更多的空间来放更多的UI组件,并且 ...

  6. Theoretical & Applied Mechanics Letters第2届编委会2015年度第1次全体编委会工作会议纪要(转自力学学会)

    2015年7月26日, Theoretical & Applied Mechanics Letters (TAML)第2届编委会在中国科学院力学研究所召开2015年第1次 全体编委工作会议.主 ...

  7. C++:初始化列表

    有两种原因需要使用初始化列表: 让我们先看一下第一个原因——必要性.(1)对另一个类成员的初始化,(2)成员是一个常量对象,(3)成员是引用.根本原因:编译器总是确保所有成员对象在构造函数体执行之前( ...

  8. 通过http流发送post请求

    一般都是用curl扩展来完成,看了手册的通过stream的方式更加简单. 请求脚本stream.php $url = 'http://localhost/stream_api.php'; $body ...

  9. spring框架 构造方法注入

    在resources里面新建applicationContext.xml 配置如下: <?xml version="1.0" encoding="UTF-8&quo ...

  10. httpwebrequest详解

    HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程 ...