28 热度

[小技巧]C#中如何为枚举类型添加描述方法

背景在我们的日常开发中,我们会经常使用枚举类型。有时我们只需要显示枚举的值或者枚举值对应名称, 但是在某些场景下,我们可能需要将枚举值显示为不同的字符串。例: 当前我们有如下枚举Levelpublic enum Level{//BadB = -1,//NormalN = 0,//GoodG = 1,//Very GoodVG = 2}这个枚举有4个可选值B, N, G, VG。 现在我...

收录时间: 2019-02-15
分类: C#开发
贡献者: Rector
25 热度

PDF File Writer C# Class Library (Version 1.21.1)

The PDF File Writer C# class library PdfFileWriter allows you to create PDF files directly from your .net application. The library shields you from the details of the PDF file structure. To use the library, you need to add a reference to the attached PdfFileWriter.dll class library file, add a using PdfFileWriter statement in every source file that uses the library and include the PdfFileWriter.dll with your distribution. For more details go to 4. Installation. Alternatively, you can include the source code of the library with your application and avoid the need to distribute a separate data link library file. The minimum development requirement is .NET Framework 4.6.2 (Compiled with Visual Studio 2017).

收录时间: 2019-02-13
分类: C#开发
贡献者: Rector
46 热度

Lambda in Java VS in C#

核心+变化“凡是钱能解决的问题,就不是大问题。有很多问题是钱无法解决的,比如生老病死,比如不再相爱。”,看过《蜗居》的朋友一眼就能认出来。虽然这部电视剧讲的是chugui,但是毫无违和感,我当时都看出来真感情了。海藻和宋思明虽然是因借钱开始的,但是后面的发展却远远超出了它。这里面钱是问题的核心,后面发生的事情都是围绕着核心的变化。社会是一张庞大而复杂的网,有节点和连...

收录时间: 2019-02-04
分类: C#开发
贡献者: Rector
61 热度

基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)

今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天。理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行不了,后来一咬牙,决定自己写一个demo出来,所以我们这里就不做理论延伸,只做demo演示,有不懂的可以在评论区讨论讨论。demo演示有两个,一个C#的Windows窗体应用程序,一个是ne...

收录时间: 2019-01-30
分类: C#开发
贡献者: Rector
55 热度

C# 8 的新提案:new 关键字类型推断

在很多情况下,一个地方只允许出现一种可能的类型。C# 仍然要求你明确列出类型,但如果目标类型“new”表达式提案被采用,那么就不再需要这些样板代码。 从表面上看,这个特性看起来与 var 关键字恰好相反。它不是根据表达式推断出变量类型,而是从变量推断出表达式的类型。以下是来自提案使用当前语法和建议语法的对比示例。

收录时间: 2019-01-28
分类: C#开发
贡献者: Rector
59 热度

浅析C# Dictionary实现原理

一、前言本篇文章配图以及文字其实整理出来很久了,但是由于各种各样的原因推迟到现在才发出来,还有之前立Flag的《多线程编程》的笔记也都已经写好了,只是说还比较糙,需要找个时间整理一下才能和大家见面。对于C#中的Dictionary类相信大家都不陌生,这是一个Collection(集合)类型,可以通过Key/Value(键值对的形式来存放数据;该类最大的优点就是它查找元素的时间复杂度接近O(1)...

收录时间: 2019-01-27
分类: C#开发
贡献者: Rector
AD 友情赞助
61 热度

C# 静态构造函数,静态变量执行顺序(升华版)

上篇 是基本语法基础下的执行顺序,包括继承这个维度下的执行顺序,我们可以依照的规律顺下来,下面我们看下一些摸不到头脑的情况我们实验 一个 类中的方法 去调用另一个非继承类的情况,  我们主要看下  静态构造函数 和没有静态构造函数执行顺序上的差别  class Program{static void Main(string[] args){ ...

收录时间: 2019-01-25
分类: C#开发
贡献者: Rector
64 热度

加强版二进制读写类:BinaryDataReader/Writer

每次我要用到二进制数据加载、解析、保存这类功能的时候,我都用的 .NET 自带的 BinaryReader 和 BinaryWriter 类. 普通数据还好,如果是某些甲方爸爸的特殊格式数据,就有点力不从心了. 处理的数据格式越复杂,我越觉得 .NET 类里还是少了一些常用又实用的东西,尤其是: 处理以不同于本机字节顺序存储的数据 处理非 .NET格式的字符串,比如以 0 结尾的字符串 读写重复的数据类型而不用一遍又一遍地循环 临时用不同编码的字符串读写数据流 文件内高级定位,例如临时定位新位置

收录时间: 2019-01-20
分类: C#开发
贡献者: Rector
51 热度

C# Deadlocks in Depth - Part 1

For me, multi-threading programming is one of the most fun things I do as a developer. It’s fun because it’s hard and challenging. And I also get a particular sense of satisfaction when solving deadlo...

收录时间: 2019-01-18
分类: C#开发
贡献者: Rector
81 热度

C# 8中的可空引用类型

原文:Nullable Reference Types In C# 8作者:.NET Core Tutorials译者:Lamond Lu现状可空引用类型?自从我开始学习.NET, 引用类型一直就是可空的。然而初级程序员通常会告诉你值类型不可空,引用类型可空。事实上,在.NET中有一种语法可以表明一个值类型是否可空。int? nullableInt1 = null;Nu...

收录时间: 2019-01-12
分类: C#开发
贡献者: Rector
80 热度

C#多线程之旅~上车吧?

前言:前几天,写了一篇关于多线程使用的文章,【线程使用】用法得到不少博友的好评,博主这几天加班写文章,把剩下的高级使用给写完,期望可以得到博友的追赞吧,那么废话不多说,开始我们的C#高级用法之旅!!前面介绍了适合在应用程序中使用线程的两种情况。但是,在一些情况下,创建新线程是不利的。在此不会列出不适台创建新线程的所有情况,只是说明一下在什么情况下不适合创建新线程。本节主要介绍两种情况:第一...

收录时间: 2019-01-10
分类: C#开发
贡献者: Rector
66 热度

Dependency Injection in C# using Autofac

In this video, you’re going to learn about what dependency injection frameworks are and how they help your application’s dependency management. We take a look at the available dependency injection frameworks for the .NET platform. Next, we learn the fundamentals of Autofac.

收录时间: 2019-01-10
分类: C#开发
贡献者: Rector
116 热度

谨慎使用 FileInfo.Exists 实例方法,而是使用 File.Exists 静态方法替代

如果你在代码中使用了 FileInfo.Exists 实例方法来判断一个文件是否存在,也许会发现此方法可能错误地判断来一个文件是否真的存在。这是一个坑。 本文将介绍坑的原因,并提供填坑的办法。 本文内容 问题代码 原因分析 解决办法 问题代码 我们使用两种不同的方式判断文件是否存在

收录时间: 2019-01-01
分类: C#开发
贡献者: Rector
126 热度

C#中关于增强类功能的几种方式

C#中关于增强类功能的几种方式本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能。拓展方法扩展方法被定义为静态方法,通过实例方法语法进行调用。方法的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。仅当使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才可使用。namespace Extensions{pu...

收录时间: 2018-12-27
分类: C#开发
贡献者: Rector
208 热度

C# 在 8.0 对比 string 和 string? 的类型

在 C# 8.0 的时候提供了可空字符串的判断,但是可空字符串和字符串的类型是不是不同的? 打开 VisualStudio 2019 这时就不能再使用 VisualStudio 2017 因为不支持 然后创建一个 dotnet core 项目,打开项目文件添加下面代码 先详细介绍每一句话的意思 第一句 OutputType 的意思是输出是什么,这里选 Exe 就是输出控制台 通过 TargetFramework 可以设置平台,更多可以设置请看 从以前的项目格式迁移到 VS2017 新项目格式 在 LangVersion 设置使用的语言版本,详细请看 VisualStudio 使用三个方法启动最新 C# 功能 最后通过 NullableReferenceTypes 开启可空类型的判断

收录时间: 2018-12-20
分类: C#开发
贡献者: Rector
120 热度

C# 创建、更改Excel命名区域(NamedRange)

C# 创建、更改Excel命名区域(NamedRange)创建命名区域是指给选定的某个单元格或多个单元格区域设置名称,目的是方便我们在文件中的其他地方对该单元格区域进行引用能够简化公式引用或者方便数据管理。下面记录了具体的C#示例代码。这里创建命名区域分为了2种情况,分别对应不同的添加方法以及命名区域的引用范围,即:1. 全局命名区域(方法:workbook.NameRanges.Add() ...

收录时间: 2018-12-11
分类: C#开发
贡献者: Rector
136 热度

C# 8中的范围类型(Range Type)

C# 8.0中加入了一个新的范围类型(Range Type)。 这里我们首先展示一些代码,并一步一步为代码添加一些不同的东西, 为大家展示一下范围类型的功能和用法。 我们最原始的代码如, 这里我们显示的定义了我们查询数组的索引1-3, 并输出他们的值。毫无疑问,当我们运行程序之后,代码结果如下:

收录时间: 2018-12-11
分类: C#开发
贡献者: Rector
118 热度

用Emit技术替代反射

用Emit技术替代反射之前在上篇博客说到用表达式来替代反射机制,可以获得较高的性能提升。这篇我们来说说用Emit技术来替代反射。System.Reflection.Emit命名空间类可用于动态发出Microsoft中间语言(MSIL)代码,以便生成的代码可以直接执行。反射也用于获取有关类及其成员的信息。换句话说,反射是一种技术,允许您检查描述类型及其成员的元数据,你可能以编程方式访问过组件对象...

收录时间: 2018-12-08
分类: C#开发
贡献者: Rector
127 热度

用lambda表达式树优化反射

用lambda表达式树优化反射本节重点不讲反射机制,而是讲lambda表达式树来替代反射中常用的获取属性和方法,来达到相同的效果但却比反射高效。每个人都知道,用反射调用一个方法或者对属性执行SetValue和GetValue操作的时候都会比直接调用慢很多,这其中设计到CLR中内部的处理,不做深究。然而,我们在某些情况下又无法不使用反射,比如:在一个ORM框架中,你要将一个DataRow转化为一...

收录时间: 2018-12-07
分类: C#开发
贡献者: Rector
132 热度

理解浅拷贝和深拷贝

1、浅拷贝与深拷贝的定义什么是拷贝?拷贝即为常说的复制或者克隆一个对象,并且通过拷贝这些源对象创建新的对象。其中拷贝分为浅拷贝和深拷贝。对于拷贝出来的对象,在使用上有很大的差异,特别是在引用类型上。浅拷贝:将对象中的所有字段复制到新的对象中。其中,值类型字段被复制到新对象中后,在新对象中的修改不会影响到原先对象的值。而新对象的引用类型则是原先对象引用类型的引用,不是引用自己对象本身。注:在...

收录时间: 2018-12-06
分类: C#开发
贡献者: Rector