![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 80
a57571737
这个作者很懒,什么都没留下…
展开
-
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 · 2091 阅读 · 0 评论 -
C# 事件浅析
前言 对于搞.net的朋友来说,经常会遇到关于事件和委托的问题:事件与委托有什么关系?事件的本质是什么?委托的本质又是什么?由于.net 做了大量的封装,对于初学者,这两个概念确实不怎么好理解。事件是用户与应用程序交互的基础,它是回调机制的一种应用。举个例子,当用户点击按钮时,我们希望弹出一句“您好”;这里的【点击】就是一个事件;那么回调就是我们注册一个方法,当用户点击时,程序自动执行这原创 2017-11-01 11:38:47 · 169 阅读 · 0 评论 -
利用反射快速给Model实体赋值
试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段。现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增。那么我们就要新建一张合同历史表,字段跟原合同表一模一样,此外多了一个 合同版本号 字段。在归档时如何把原始合同信息插入到合同历史表呢? 很容易就能想到的一种解决方法:insert into 合同历史表(原创 2017-11-09 10:43:23 · 1413 阅读 · 0 评论 -
C# 多态的实现
封装、继承、多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了。我一直认为学习OO的最好方法就是结合实践,封装、继承在实际工作中的应用随处可见,但多态呢?也许未必,可能不经意间用到也不会把它跟“多态”这个词对应起来。在此抛砖引玉,大家讨论,个人能力有限,不足之处还请指正。之前看到过类似的问题:如果面试时主考官要求你用一句话来描述原创 2017-11-08 11:10:13 · 189 阅读 · 0 评论 -
C# Lock关键字
lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。 lock语句根本使用的就是Monitor.Enter和Monitor.Exit,也就是说lock(this)时执行Monitor.Enter(this),大括号结束时执行Monitor.Exit(this).他的意义在于什么呢,对于任何一个对象来说,他在内存中的第一部分放置的是所有方法的地址原创 2017-10-13 10:40:58 · 273 阅读 · 0 评论 -
C# 去除字符串首尾字符或字符串
在做一个属性入库的功能,将Excel属性数据导入到图层要素当中,这里Excel和SDE数据库数据存在一个关联字段,通过关联字段值进行匹配属性入库。 在实际业务中,由于普查数据往往某些字段值比较复杂,在写入到图层中时用户可能做一些简化,例如一个要素编号为0532BH001,可能录入到图层中只录入BH001,这样就导致了图层要素和Excel文件关联字段的值并不一定是完全相等的,可原创 2017-11-07 10:58:39 · 2305 阅读 · 0 评论 -
【C#】加快Bitmap的访问速度
在对Bitmap图片操作的时候,有时需要用到获取或设置像素颜色方法:GetPixel 和 SetPixel,如果直接对这两个方法进行操作的话速度很慢,这里我们可以通过把数据提取出来操作,然后操作完在复制回去可以加快访问速度其实对Bitmap的访问还有两种方式,一种是内存法,一种是指针法1、内存法 这里定义一个类LockBitmap,通过把Bitmap数据拷贝出来,原创 2017-10-12 11:31:24 · 1383 阅读 · 1 评论 -
C# File类的操作
File类,是一个静态类,主要是来提供一些函数库用的。静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件。File类方法的参量很多时候都是路径path。File的一些方法可以返回FileStream和StreamWriter的对象。可以和他们配套使用。System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操原创 2017-10-11 10:29:30 · 210 阅读 · 0 评论 -
神奇的Timer
最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下注:这里的Timer类特指System.Threading.Timer类情景1:我需要服务器在每天的00:00点执行一个操作我当开始想到的方法很2b,居然是设定定时器每个1分钟去检查时间,如果当前时间与00:00相差不超过1分钟时,就执原创 2017-10-10 10:51:22 · 248 阅读 · 0 评论 -
异步CTP(Async CTP)为什么那样工作?
对异步CTP感兴趣有很多原因。异步CTP使异步编程比以前更加容易了。它虽然没有Rx强大,但是更容易学。异步CTP介绍了两个新的关键字,async和await。异步方法(或Lambda表达式)必须返回void,Task或Task。这篇文章不是介绍异步CTP的,因为网上有很多这样的文章。这篇文章的目的是把程序员开始使用Async CTP遇到的一些常见问题集中起来。推断返回类型当从异步方原创 2017-09-22 16:07:31 · 334 阅读 · 0 评论 -
.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 · 362 阅读 · 0 评论 -
C#的Enum——枚举
枚举 枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。 枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键原创 2017-10-16 11:05:05 · 316 阅读 · 0 评论 -
使用 Task 简化异步编程
.Net 传统异步编程概述.NET Framework 提供以下两种执行 I/O 绑定和计算绑定异步操作的标准模式:异步编程模型 (APM),在该模型中异步操作由一对 Begin/End 方法(如 FileStream.BeginRead 和 Stream.EndRead)表示。基于事件的异步模式 (EAP),在该模式中异步操作由名为“操作名称Async”和“操作名称Com原创 2017-11-10 14:29:20 · 233 阅读 · 0 评论 -
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 · 322 阅读 · 0 评论 -
一个简单例子理解C#的协变和逆变
关于协变逆变,SolidMango的解释是比较可取的。有了协变,比如,在需要返回IEnumerable类型的时候,可以使用IEnmerable来替代;有了逆变,比如,在需要接收IComparable类型形参方法中,可以使用IComparable类型实参来替代。协变先来体会协变。有2个具有继承关系的父类和子类。 public class Animal {原创 2017-11-23 10:22:14 · 315 阅读 · 0 评论 -
C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
使用C#实现加减乘除算法经常被用作新手练习。本篇来分别体验通过委托、接口、匿名方法、泛型委托来实现。使用委托实现加减乘除拥有相同的参数个数、类型和返回类型,首先想到了使用委托实现。//创建一个委托public delegate decimal MathOperation(decimal left, decimal right);//创建方法参数和返回结果符合委托的定义原创 2017-11-22 11:02:56 · 1276 阅读 · 1 评论 -
c#打包文件解压缩
首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载。 下面对类库使用的封装方法:得到指定的输入流的ZIP压缩流对象 /// /// 得到指定的输入流的ZIP压缩流对象【原有流对象不会改变】 /// /// ///原创 2017-11-21 11:12:16 · 556 阅读 · 0 评论 -
8种主要排序算法的C#实现 (二)
归并排序归并排序也是采用“分而治之”的方式。刚发现分治法是一种算法范式,我还一直以为是一种需要意会的思想呢。不好意思了,孤陋寡闻了,哈哈!原理:将两个有序的数列,通过比较,合并为一个有序数列。 维基入口为方便理解,此处实现用了List的一些方法,随后有IList版本。实现如下:public static Listint> MergeSortOnlyL原创 2017-11-20 14:24:07 · 398 阅读 · 0 评论 -
C#中大List的内存分配
之前在开发中只用到List的时候几乎就是拿过来就用,从来没有考虑过List的内存分配问题,试想一个有10万元素的List的在构造和添加元素时内存是如何变化的呢?在MSDN上关于List的Capacity属性是这么解释的 ,也就是说,当我们添加的元素数量小于等于Capacity的值时,List是不会重新调整内部数据结构,也就是不会重新申请或者分配内存,而当我们添加的元素数量大于Ca原创 2017-11-06 10:44:14 · 651 阅读 · 0 评论 -
Parallel Programming-实现并行操作的流水线(生产者、消费者)
本文介绍如何使用C#实现并行执行的流水线(生产者消费者):1.流水线示意图2.实现并行流水线一、流水线示意图 上图演示了流水线,action1接收input,然后产生结果保存在buffer1中,action2读取buffer1中由action1产生的数据,以此类推指导action4完成产生Output。以上也是典型的生产者消原创 2017-11-14 17:32:07 · 337 阅读 · 0 评论 -
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 · 466 阅读 · 0 评论 -
C#实现对图片文件的压缩、裁剪操作实例
本文实例讲述了C#对图片文件的压缩、裁剪操作方法,在C#项目开发中非常有实用价值。分享给大家供大家参考。具体如下:一般在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便。毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强人意。于是采用C#为我们提供的图像编辑功能,实现一站式上传,通过程原创 2017-11-03 10:45:13 · 678 阅读 · 0 评论 -
Guid ToString 格式知多少?
在日常编程中,Guid是比较常用的,最常见的使用就是如下所示:string id = Guid.NewGuid().ToString();这条语句会生成一个新的Guid并转成字符串,如下:// 10244798-9a34-4245-b1ef-9143f9b1e68a但是还有一些情况下,我们会有一些细节上的差异,如:前后有大括号{xxxxxxxx-xx原创 2017-11-13 11:37:46 · 348 阅读 · 0 评论 -
理解 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 · 154 阅读 · 0 评论 -
如何创建C# Closure ?
JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure。下面就介绍一下如何在C#中创建神奇的闭包。 在这之前,我们必须先知道如何在C#中定义函数 //函数定义,参数为string,返回为string Funcstring, string> myFunc = delegate(string msg)原创 2017-09-30 11:38:46 · 291 阅读 · 0 评论 -
C#多线程基础,适合新手了解
一、创建线程 在整个系列文章中,我们主要使用Visual Studio 2015作为线程编程的主要工具。在C#语言中创建、使用线程只需要按以下步骤编写即可:1、启动Visual Studio 2016,新建一个控制台应用程序。2、确保该控制台程序使用.NET Framework 4.6或以上版本。然而在该篇中的所有示例使用较低版本可以正常工作。3、双击打开该控制台原创 2017-09-21 10:22:34 · 156 阅读 · 0 评论 -
C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密
要求:密码必须包含数字和字母思路:1.列出数字和字符。 组成字符串 :chars 2.利用randrom.Next(int i)返回一个小于所指定最大值的非负随机数。 3. 随机取不小于chars长度的随机数a,取字符串chars的第a位字符。 4.循环 8次,得到8位密码 5.循环N次,批量得到密码。原创 2017-09-29 11:22:45 · 1332 阅读 · 0 评论 -
.net mvc 利用NPOI导入导出excel
1、导出Excel :首先引用NPOI包(Action一定要用FileResult) /// /// 批量导出需要导出的列表 /// /// public FileResult ExportStu2() {转载 2017-08-24 11:09:28 · 768 阅读 · 0 评论 -
MVC4 中使用 Area 和 注意的地方
在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰。步骤如下: 项目 –> 添加 -> 区域 (Area) 输入 Admin添加成功后Area包含:创建一个空MVC工程结构类似,Admin Area 有自己的 Controllers、Models 和 Views 文件夹,不一样的地方就是多了一个 AdminAreaRegistra转载 2017-08-28 10:55:02 · 352 阅读 · 0 评论 -
未将对象引用到实例
对象为null时调用给对象的属性或方法“未将对象引用到实例”是很多像我一样的初学者经常遇到的一个问题,常常令人烦恼不已,那么这个问题是怎么发生的呢?先给大家看一张图,我们从这张图入手来分析这个错误造成的原因。可能很多人看到这样的代码会觉得可笑:”能写出这样的代码,看来此人的智商已“超越”人类的范畴了!“但是就是有某些内裤外穿的超人叔叔经常不间歇性的写出这样的代码、遇原创 2017-09-13 11:36:21 · 440 阅读 · 0 评论 -
使用反射、特性简化代码
假设现在有一个学生类(Student) /// /// 学生类 /// public class Student { /// /// 名字 /// private string name; public string Name {原创 2017-09-05 13:03:27 · 183 阅读 · 0 评论 -
C#属性(Attribute)用法实例解析
属性(Attribute)是C#程序设计中非常重要的一个技术,应用范围广泛,用法灵活多变。本文就以实例形式分析了C#中属性的应用。具体入戏:一、运用范围程序集,模块,类型(类,结构,枚举,接口,委托),字段,方法(含构造),方法,参数,方法返回值,属性(property),Attribute[AttributeUsage(AttributeTargets.All)]转载 2017-08-23 11:06:41 · 665 阅读 · 0 评论 -
浅入浅出Lambda表达式
大家在开发中会经常看到也会经常使用lambda表达式。园子里也有很多详解lambda表达式的文章,多是从横向来讲述。但lambda表达式到底如何变成现在这个样子,表达式的形式到底代表什么含义,这些可能就不太明白了。本文将从来源开始,纵向剖析,一直演化出我们常用的lambda表达式。 引子为方便说明,先举个例子,列出Lambda表达式的一个典型形式:原创 2017-09-04 10:50:42 · 223 阅读 · 0 评论 -
APS.NET MVC4生成解析二维码简单Demo
一、视图@{ Layout = null;}DOCTYPE html>html>head> meta name="viewport" content="width=device-width" /> title>Indextitle> script src="~/Scripts/jquery-1.8.2.min.js">script>转载 2017-08-25 11:04:00 · 475 阅读 · 0 评论 -
C# 面向对象三大特性:封装、继承、多态
面向对象有封装、继承、多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成任务。这种编程方法提供了非常强大的多样性,大大增加了代码的重用机会,增加了程序开发的速度,将具备独立性特制的程序代码包装起来,修改部分程序代码时不至于会影响到程序的其他部分。1.封装每个对象都包含它进行操作所需要的所有信息,封装只公开代转载 2017-08-22 10:27:35 · 455 阅读 · 1 评论 -
基于C#委托的深入分析
1.委托的定义委托可以看成是一种数据类型,可以用于定义变量能接受的值只能是一个方法。委托简单的示例:代码如下:namespace DelegateDemo { class Program { public delegate int MathOptDelegate(int value1,int value2);转载 2017-08-21 11:29:11 · 193 阅读 · 0 评论 -
C#基础之匿名方法实例教程
本文以实例形式讲解了C#的匿名方法的用法,分享给大家供大家参考之用。具体如下:匿名方法是C# 2.0的语言新特性。首先看个最简单的例子class Program { static void Main(string[] args) { List names = new List(); names.Add("Sunny Chen"); names转载 2017-08-18 11:03:55 · 339 阅读 · 0 评论 -
C# DataTable 详解
添加引用using System.Data;创建表//创建一个空表DataTable dt = new DataTable();//创建一个名为"Table_New"的空表DataTable dt = new DataTable("Table_New");创建列//1.创建空列DataColumn dc = new DataColum转载 2017-09-06 10:52:44 · 738 阅读 · 0 评论 -
C#中怎样实现序列化和反序列化
我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的因为我们如果想要将一个对象持久化到文件中 如果我们使用IO流文件流操作的话可能就没办法实现了,但是我们用序列化的话就可以轻而易举的实现,并且当我们回拿到数据的时候,我们拿到的也是一个对象,但是它保存到文件中是二进制文件具体原创 2017-09-14 11:36:30 · 654 阅读 · 0 评论 -
静态构造函数
先看一道常见题目,以下代码的执行结果是什么?class A{ public static int X = B.Y + 1; static void Main(string[] args) { Console.WriteLine(X); }} class B{ public static int Z = 10;转载 2017-08-29 10:31:36 · 324 阅读 · 0 评论