自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 MVC 中的 ViewModel

ViewModel这个概念不只是在在MVC模式中有,你会在很多关于MVC、MVP、MVVM的文章中见到这个说法,并且这个概念在任何技术中都有可能提到,比如ASP.NET, Silverlight, WPF, or MVC... 现在我们来讨论如何在MVC中使用它。ASP.NET MVC ViewModel 是什么?在一般的情况下,我们向View中传递数据的时候,都是一个Model,

2017-11-24 10:28:44 2084

原创 一个简单例子理解C#的协变和逆变

关于协变逆变,SolidMango的解释是比较可取的。有了协变,比如,在需要返回IEnumerable类型的时候,可以使用IEnmerable来替代;有了逆变,比如,在需要接收IComparable类型形参方法中,可以使用IComparable类型实参来替代。协变先来体会协变。有2个具有继承关系的父类和子类。 public class Animal {

2017-11-23 10:22:14 313

原创 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法

使用C#实现加减乘除算法经常被用作新手练习。本篇来分别体验通过委托、接口、匿名方法、泛型委托来实现。使用委托实现加减乘除拥有相同的参数个数、类型和返回类型,首先想到了使用委托实现。//创建一个委托public delegate decimal MathOperation(decimal left, decimal right);//创建方法参数和返回结果符合委托的定义

2017-11-22 11:02:56 1273 1

原创 c#打包文件解压缩

首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载。  下面对类库使用的封装方法:得到指定的输入流的ZIP压缩流对象        /// /// 得到指定的输入流的ZIP压缩流对象【原有流对象不会改变】 /// /// ///

2017-11-21 11:12:16 551

原创 8种主要排序算法的C#实现 (二)

归并排序归并排序也是采用“分而治之”的方式。刚发现分治法是一种算法范式,我还一直以为是一种需要意会的思想呢。不好意思了,孤陋寡闻了,哈哈!原理:将两个有序的数列,通过比较,合并为一个有序数列。 维基入口为方便理解,此处实现用了List的一些方法,随后有IList版本。实现如下:public static Listint> MergeSortOnlyL

2017-11-20 14:24:07 396

原创 8种主要排序算法的C#实现 (一)

简介排序算法是我们编程中遇到的最多的算法。目前主流的算法有8种。  平均时间复杂度从高到低依次是:     冒泡排序(o(n2)),选择排序(o(n2)),插入排序(o(n2)),堆排序(o(nlogn)),     归并排序(o(nlogn)),快速排序(o(nlogn)), 希尔排序(o(n1.25)),基数排序(o(n))这些平均时间复杂度是参照维

2017-11-17 10:53:23 463

转载 c# 无损高质量压缩图片代码

在CSDN上看到了一个压缩算法:http://blog.csdn.net/qq_16542775/article/details/51792149进过测试这个算法,发现,将原始图像的大小进行对半处理,然后迭代跳转压缩质量参数,可以得到不错的效果。/// /// 无损压缩图片/// /// 原图片地址/// 压缩后保存图片地址/// 压缩质量(数字越小压缩率越高)1-100

2017-11-15 15:41:55 254

原创 Parallel Programming-实现并行操作的流水线(生产者、消费者)

本文介绍如何使用C#实现并行执行的流水线(生产者消费者):1.流水线示意图2.实现并行流水线一、流水线示意图  上图演示了流水线,action1接收input,然后产生结果保存在buffer1中,action2读取buffer1中由action1产生的数据,以此类推指导action4完成产生Output。以上也是典型的生产者消

2017-11-14 17:32:07 336

原创 Guid ToString 格式知多少?

在日常编程中,Guid是比较常用的,最常见的使用就是如下所示:string id = Guid.NewGuid().ToString();这条语句会生成一个新的Guid并转成字符串,如下:// 10244798-9a34-4245-b1ef-9143f9b1e68a但是还有一些情况下,我们会有一些细节上的差异,如:前后有大括号{xxxxxxxx-xx

2017-11-13 11:37:46 342

原创 使用 Task 简化异步编程

.Net 传统异步编程概述.NET Framework 提供以下两种执行 I/O 绑定和计算绑定异步操作的标准模式:异步编程模型 (APM),在该模型中异步操作由一对 Begin/End 方法(如 FileStream.BeginRead 和 Stream.EndRead)表示。基于事件的异步模式 (EAP),在该模式中异步操作由名为“操作名称Async”和“操作名称Com

2017-11-10 14:29:20 232

原创 利用反射快速给Model实体赋值

试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段。现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增。那么我们就要新建一张合同历史表,字段跟原合同表一模一样,此外多了一个 合同版本号 字段。在归档时如何把原始合同信息插入到合同历史表呢?        很容易就能想到的一种解决方法:insert into 合同历史表(

2017-11-09 10:43:23 1403

原创 C# 多态的实现

封装、继承、多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了。我一直认为学习OO的最好方法就是结合实践,封装、继承在实际工作中的应用随处可见,但多态呢?也许未必,可能不经意间用到也不会把它跟“多态”这个词对应起来。在此抛砖引玉,大家讨论,个人能力有限,不足之处还请指正。之前看到过类似的问题:如果面试时主考官要求你用一句话来描述

2017-11-08 11:10:13 187

原创 C# 去除字符串首尾字符或字符串

在做一个属性入库的功能,将Excel属性数据导入到图层要素当中,这里Excel和SDE数据库数据存在一个关联字段,通过关联字段值进行匹配属性入库。      在实际业务中,由于普查数据往往某些字段值比较复杂,在写入到图层中时用户可能做一些简化,例如一个要素编号为0532BH001,可能录入到图层中只录入BH001,这样就导致了图层要素和Excel文件关联字段的值并不一定是完全相等的,可

2017-11-07 10:58:39 2261

原创 C#中大List的内存分配

之前在开发中只用到List的时候几乎就是拿过来就用,从来没有考虑过List的内存分配问题,试想一个有10万元素的List的在构造和添加元素时内存是如何变化的呢?在MSDN上关于List的Capacity属性是这么解释的  ,也就是说,当我们添加的元素数量小于等于Capacity的值时,List是不会重新调整内部数据结构,也就是不会重新申请或者分配内存,而当我们添加的元素数量大于Ca

2017-11-06 10:44:14 642

原创 C#实现对图片文件的压缩、裁剪操作实例

本文实例讲述了C#对图片文件的压缩、裁剪操作方法,在C#项目开发中非常有实用价值。分享给大家供大家参考。具体如下:一般在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便。毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强人意。于是采用C#为我们提供的图像编辑功能,实现一站式上传,通过程

2017-11-03 10:45:13 661

原创 StringBuilder String string.Concat 字符串拼接速度

首先看测试代码:public class StringSpeedTest { private readonly static string _testStr = "0123456789"; public string StringAdd(int count) { string str = string

2017-11-02 11:48:09 318

原创 C# 事件浅析

前言  对于搞.net的朋友来说,经常会遇到关于事件和委托的问题:事件与委托有什么关系?事件的本质是什么?委托的本质又是什么?由于.net 做了大量的封装,对于初学者,这两个概念确实不怎么好理解。事件是用户与应用程序交互的基础,它是回调机制的一种应用。举个例子,当用户点击按钮时,我们希望弹出一句“您好”;这里的【点击】就是一个事件;那么回调就是我们注册一个方法,当用户点击时,程序自动执行这

2017-11-01 11:38:47 164

原创 理解 Thread.Sleep 函数

我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2017-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2017-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0)

2017-10-17 10:50:59 152

原创 C#的Enum——枚举

枚举  枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。  枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键

2017-10-16 11:05:05 309

原创 C# Lock关键字

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。 lock语句根本使用的就是Monitor.Enter和Monitor.Exit,也就是说lock(this)时执行Monitor.Enter(this),大括号结束时执行Monitor.Exit(this).他的意义在于什么呢,对于任何一个对象来说,他在内存中的第一部分放置的是所有方法的地址

2017-10-13 10:40:58 272

原创 【C#】加快Bitmap的访问速度

在对Bitmap图片操作的时候,有时需要用到获取或设置像素颜色方法:GetPixel 和 SetPixel,如果直接对这两个方法进行操作的话速度很慢,这里我们可以通过把数据提取出来操作,然后操作完在复制回去可以加快访问速度其实对Bitmap的访问还有两种方式,一种是内存法,一种是指针法1、内存法  这里定义一个类LockBitmap,通过把Bitmap数据拷贝出来,

2017-10-12 11:31:24 1328 1

原创 C# File类的操作

File类,是一个静态类,主要是来提供一些函数库用的。静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件。File类方法的参量很多时候都是路径path。File的一些方法可以返回FileStream和StreamWriter的对象。可以和他们配套使用。System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操

2017-10-11 10:29:30 199

原创 神奇的Timer

最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下注:这里的Timer类特指System.Threading.Timer类情景1:我需要服务器在每天的00:00点执行一个操作我当开始想到的方法很2b,居然是设定定时器每个1分钟去检查时间,如果当前时间与00:00相差不超过1分钟时,就执

2017-10-10 10:51:22 244

原创 .net 反射访问私有变量和私有方法

以下为本次实践代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace Conso

2017-10-09 11:26:14 359

原创 如何创建C# Closure ?

JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。  在这之前,我们必须先知道如何在C#中定义函数 //函数定义,参数为string,返回为string Funcstring, string> myFunc = delegate(string msg)

2017-09-30 11:38:46 283

原创 C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密

要求:密码必须包含数字和字母思路:1.列出数字和字符。 组成字符串 :chars        2.利用randrom.Next(int i)返回一个小于所指定最大值的非负随机数。        3. 随机取不小于chars长度的随机数a,取字符串chars的第a位字符。        4.循环 8次,得到8位密码        5.循环N次,批量得到密码。

2017-09-29 11:22:45 1318

原创 C#中的foreach和yield

1. foreachC#编译器会把foreach语句转换为IEnumerable接口的方法和属性。foreach (Person p in persons) { Console.WriteLine(p); }foreach语句会解析为下面的代码段。调用GetEnumerator()方法,获得数组的一个枚举在while循环中,只要MoveNe

2017-09-28 11:27:55 239

原创 数组为什么可以使用linq查询

问题引出  这视乎是个完全不必要进行讨论的话题,因为linq(这里具体是linq to objects)本来就是针对集合类型的,数组类型作为集合类型的一种当然可以使用了。不过我还是想写一下,这个问题源于qq群里一位朋友的提问:.net的数组类型都隐式继承了Array类,该类是一个抽象类,并且实现了IEnumerable、ICollection、IList接口。但linq的方法都是针对实现了

2017-09-27 10:57:24 314

原创 C#中的 具名参数 和 可选参数

具名参数 和 可选参数 是 C# framework 4.0 出来的新特性。一. 常规方法定义及调用public void Demo1(string x, int y){ //do something...}public void Main(){ //调用 Demo1("similar", 22);}

2017-09-26 11:10:04 231

原创 显示实现接口

接口定义了一系列的行为规范,为类型定义一种Can-Do的功能。例如,实现IEnumerable接口定义了GetEnumerator方法,用于获取一个枚举数,该枚举数支持在集合上进行迭代,也就是我们常说的foreach。接口只是定义行为,具体的实现需要由具体类型负责,实现接口的方法又分为隐式实现与显示实现。一、隐式/显示实现接口方法  简单的说,我们平时“默认”使用的都是隐式的实现方

2017-09-25 10:47:01 376

原创 异步CTP(Async CTP)为什么那样工作?

对异步CTP感兴趣有很多原因。异步CTP使异步编程比以前更加容易了。它虽然没有Rx强大,但是更容易学。异步CTP介绍了两个新的关键字,async和await。异步方法(或Lambda表达式)必须返回void,Task或Task。这篇文章不是介绍异步CTP的,因为网上有很多这样的文章。这篇文章的目的是把程序员开始使用Async CTP遇到的一些常见问题集中起来。推断返回类型当从异步方

2017-09-22 16:07:31 331

原创 C#多线程基础,适合新手了解

一、创建线程  在整个系列文章中,我们主要使用Visual Studio 2015作为线程编程的主要工具。在C#语言中创建、使用线程只需要按以下步骤编写即可:1、启动Visual Studio 2016,新建一个控制台应用程序。2、确保该控制台程序使用.NET Framework 4.6或以上版本。然而在该篇中的所有示例使用较低版本可以正常工作。3、双击打开该控制台

2017-09-21 10:22:34 152

原创 有趣的网站-第二弹

1.预测您的死亡时间,通过输入出生日期,选择性别、BMI范围(可以通过页面下方输入身高、体重计算出)、生活态度和是否抽烟,点击查看按钮就可以得出结果。 我测了我还能活52多年。。不过看着时间越来越少,心理感觉毛毛的。好恐怖死亡时间预测: http://www.deathclock.com/   2.很有意思的广告,第一次看到这种广告。。。太有

2017-09-20 17:04:44 249

原创 浅谈c#接口的问题,适合新手来了解

这段时间的项目有用到接口,开始不是特别理解接口,只是单单知道接口定义非常简单,甚至觉得这个接口只是多此一举(个人开发的时候)。现在开始团队开发,才发现接口原来是这么的重要和便捷!接下来就来谈谈我这段时间对接口使用的粗浅见解,说的对希望大家赞,说的有误的地方希望大家多多包涵建议!READY GO!接口的定义就不多说了,它有一个很重要的知识点,就是所有继承这个接口类的都必须实现

2017-09-19 10:50:13 848 2

原创 C#中数组作为参数传递的问题

原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值。如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难被检查到,所以我们在设计方法参数的时候,要充分考虑传递引用类型参数或者引用方式传递引用类型参数可能带来的后果。如果一个数据在传递过程中不能被改变,就要在构建这个对象的时候就使其值(字段

2017-09-18 13:47:58 595

原创 C#中的表达式树的浅解

表达式树可以说是Linq的核心之一,为什么是Linq的核心之一呢?因为表达式树使得c#不再是仅仅能编译成IL,我们可以通过c#生成一个表达式树,将结果作为一个中间格式,在将其转换成目标平台上的本机语言。比如SQL。我们常用的Linq to sql就是这样生成SQL的。表达式树是.NET 3.5之后引入的,它是一个强大灵活的工具(比如用在LINQ中构造动态查询)。先来看看Expres

2017-09-15 12:45:33 260

原创 C#中怎样实现序列化和反序列化

我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的因为我们如果想要将一个对象持久化到文件中 如果我们使用IO流文件流操作的话可能就没办法实现了,但是我们用序列化的话就可以轻而易举的实现,并且当我们回拿到数据的时候,我们拿到的也是一个对象,但是它保存到文件中是二进制文件具体

2017-09-14 11:36:30 644

原创 未将对象引用到实例

对象为null时调用给对象的属性或方法“未将对象引用到实例”是很多像我一样的初学者经常遇到的一个问题,常常令人烦恼不已,那么这个问题是怎么发生的呢?先给大家看一张图,我们从这张图入手来分析这个错误造成的原因。可能很多人看到这样的代码会觉得可笑:”能写出这样的代码,看来此人的智商已“超越”人类的范畴了!“但是就是有某些内裤外穿的超人叔叔经常不间歇性的写出这样的代码、遇

2017-09-13 11:36:21 438

原创 C# Byte[]数组读取和写入文件

protected void ByteToString_Click(object sender, EventArgs e) { string content = this.txtContent.Text.ToString(); if (string.IsNullOrEmpty(content))

2017-09-11 11:37:53 1550 1

原创 C#中Dictionary的用法

C#中Dictionary的用法  1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic //程序集:mscorlib 2.Dictionary的描述从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成任何键都必须是

2017-09-07 10:52:26 259

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除