CFXIXI工作室首页
CF西西的博客 | .NET

保留4位小数使用string.Format方法

27. 八月 2015
  string.Format("{0:N4}", v.Value);

.NET

Quartz快速开始

18. 八月 2015
http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html

.NET

【.Net】如何截取2位小数(不用四舍五入)

12. 六月 2015
两个方法参考:   /// <summary> /// 不四舍五入获得浮动收益 /// </summary> /// <param name="amount"></param> /// <returns></returns> public static decimal FormatFloatProfit(decimal amount) { decimal absValue = Math.Abs(amount);//绝对值 decimal flag = absValue / amount;//正负数标记 return Math.Floor(absValue * 100) / 100 * flag; } /// <summary> /// 转换string为decimal /// </summary> /// <param name="d"></param> /// <returns></returns> public static decimal ConvertToDecimal(string d) { decimal result = default(decimal); if (decimal.TryParse(d, out result)) return result; else return default(decimal); }   /// <summary> /// 格式化decimal /// </summary> /// <param name="d"></param> /// <returns></returns> public static string GetFormatString(decimal d) { return (Math.Floor(d * 100) / 100).ToString("0.00"); }

.NET

【.Net】如何对接口做防止重复提交

9. 六月 2015
原理:其实做防重复很简单,首先需要客户端配合,每次在执行流程最开始的时候生成一个ReqNo,其次需要将这个ReqNo缓存在服务器端(一般利用CouchBase等缓存数据库来实现),如果有重复请求需要比对缓存,如果有值表示之前有过提交,不执行逻辑,如果没有表示第一次提交执行逻辑

.NET

where T : class泛型类型约束

18. 五月 2015
类型参数约束,.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型where T : class T必须是一个类(class)类型where T : new() | T必须要有一个无参构造函数where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类where T : NameOfInterface | T必须实现名为NameOfInterface的接口

.NET

.net截取两位小数

11. 二月 2015
转自:http://www.cnblogs.com/DataFlow/archive/2012/05/17/2505751.html decimal.Round 的区别   有什么区别?   decimal.Round(xx, decimalPos, MidpointRounding.ToEven); VS decimal.Round(xx, decimalPos, MidpointRounding.AwayFromZero);   AwayFromZero, 就是常用的四舍五入.   ToEven, 就比较特别了,称为就近舍入或四舍六入五成双 e.g.         22.333        to         22.33        22.335        to         22.34        22.325        to         22.32        22.336        to         22.34        22.326        to         22.33 后面是5的情况比较特殊,如果前面是奇数,则升上去,反之,则截掉,在金融结算中,经常使用该方法,来平衡双方的盈亏

.NET, C#

grunt 安装教程

7. 一月 2015
转自:http://www.bluesdream.com/blog/windows-installs-the-grunt-and-instructions.html Windows下安装Grunt的指南和相关说明 13 November 2013 Grunt基于Node.js,其中 npm 是 Node.js 的包管理器,而Grunt和Grunt插件就通过 npm 安装并管理。 Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用。 安装Node.js:去Node.js官网,点击INSTALL下载并安装,现在的Node.js会自动安装npm。 安装完成之后,打开命令行,进行后续的操作(开始->输入CMD 或 开始->所有程序 ->命令提示符)。 进入Node.js的安装目录(默认路径为"C:\Program Files\nodejs"):cd \pro*\nod*可以通过以下2个命令,查看 node.js 和 npm 的版本号:node -v npm -v 安装Grunt:如果你之前安装过老的0.3版本,请先卸载:npm uninstall -g grunt 安装Grunt命令行(CLI):npm install -g grunt-cli 注1:-g代表全局安装,Grunt有二个版本:服务器端版本(grunt)和客户端版本(grunt-cli)。 注2:安装grunt-cli并不等于安装了grunt!grunt CLI的任务很简单:调用与Gruntfile在同一目录中的grunt。这样带来的好处是,允许你在同一个系统上同时安装多个版本的grunt。而grunt使用模块结构,除了安装命令行界面以外,还要根据需要安装相应的模块。这些模块应该采用局部安装,因为不同项目可能需要同一个模块的不同版本。 上述命令执行完后,grunt 命令就被加入到你的系统路径中了,以后就可以在任何目录下执行此命令了。 创建新的Grunt项目:假设这个项目安装在D盘根目录,我们首先进度D盘:d: 创建项目文件夹:mkdir testProject 进入文件夹:cd testProject 接着在你的项目文件夹根目录下添加两个文件:package.json 和 Gruntfile。 package.json: 此文件被npm用于存储项目的元数据,以便将此项目发布为npm模块。Gruntfile: 此文件被命名为 Gruntfile.js 或 Gruntfile.coffee,用来配置或定义任务(task)并加载Grunt插件。 创建package.json文件:package.json应当放置于项目的根目录中,与Gruntfile在同一目录中,并且应该与项目的源代码一起被提交。大部分 grunt-init 模版都会自动创建特定于项目的package.json文件。 方法一:执行 npm init 命令(根据默认的grunt-init模板,引导你创建一个“基本”的package.json文件):npm init 根据提示填写信息(都允为空): name: (GruntT)      // 模块名称:只能包含小写字母数字和中划线,如果为空则使用项目文件夹名称代替 version: (0.0.0)     // 版本号 description:       // 描述:会在npm搜索列表中显示 entry point: (index.js) // 模块入口文件 test command:       // 测试脚本 git repository:      // git仓库地址 keywords:         // 关键字:用于npm搜索,多个关键字用空格分开 author:          // 作者 license: (BSD-2-Clause)  // 开原协议 方法二:手动创建package.json文件,添加项目/模块的描述信息: {  "name": "my-project",  "version": "0.1.0" } 附:package.json官方文档一个较完整的package.json文件 安装Grunt和Grunt插件:方法一:手动添加,修改package.json文件: {  "name": "my-project",  "version": "0.1.0",  "devDependencies": {   "grunt": "~0.4.1",   "grunt-contrib-cssmin": "~0.7.0"  } } 注:devDependencies里面的参数,指定了项目依赖的Grunt和Grunt插件版本。其中"~0.7.0"代表安装该插件的某个特定版本,如果只需安装最新版本,可以改成"*"。 然后执行:npm install 这时你会发现项目文件夹中多了个node_modules文件夹,其里面就是对应的Grunt和Grunt插件。 方法二:自动安装:通过 npm install <module> --save-dev 命令 安装最新版的Grunt:npm install grunt --save-dev 接着安装我们所需要的插件:npm install grunt-contrib-cssmin --save-dev 注:其中--save-dev,表示将它作为你的项目依赖添加到package.json文件中devDependencies内。如果你要安装指定版本的Grunt或者Grunt插件,只需要运行npm install grunt@VERSION --save-dev命令,其中VERSION就是你所需要的版本(指定版本号即可)。 附:Grunt官方插件列表,其中带星号的为官方维护的插件。 创建Gruntfile.js文件: module.exports = function(grunt) {       // 配置任务参数     grunt.initConfig({         pkg: grunt.file.readJSON('package.json'),         cssmin: {             combine: {                 files: {                   'css/release/compress.css': ['css/*.css'] // 指定合并的CSS文件 ['css/base.css', 'css/global.css']                 }             },            minify: {                 options: {                     keepSpecialComments: 0, /* 删除所有注释 */                     banner: '/* minified css file */'                 },                 files: {                     'css/release/master.min.css': ['css/master.css']                 }             }         }     });       // 插件加载(加载 "cssmin" 模块)     grunt.loadNpmTasks('grunt-contrib-cssmin');       // 自定义任务:通过定义 default 任务,可以让Grunt默认执行一个或多个任务。     grunt.registerTask('default', ['cssmin']);   }; 执行配置中所有的任务:grunt 执行某个特定的任务:grunt cssmin 测试:接着我们在项目文件夹中创建个子文件夹,命名为:CSS 并且在里面创建base.css和master.css,2个CSS文件,你可以随便写点内容在里面。 然后在命令行中执行grunt,看到如下提示说明执行成功:Running "cssmin:combine" (cssmin) taskFile css/release/compress.css created. Running "cssmin:minify" (cssmin) taskFile css/release/master.min.css created. Done, without errors. 参考文档:http://www.gruntjs.net/docs/getting-started/http://www.gruntjs.org/article/installing_grunt.html

.NET

mongoDB查询示例(根据方法名查询以及查询条数)

17. 十二月 2014
db.User20141125_Error.find( { "Method" : "GetTradeApiAddress", }) db.User20141125.find( { "Method" : "GetTradeApiAddress", }).count()

.NET

怎样判断jQuery 元素是否显示与隐藏

29. 十一月 2014
转自:http://jingyan.baidu.com/article/d2b1d1026ed3e85c7e37d48b.html jQuery 判断一个元素是显示还是隐藏, jQuery 使用 is() 的方法来判断一个元素是否显示,反之,则为隐藏,jQuery 判断是否显示,jQuery 判断是否隐藏,jQuery 判断是否可见。 判断一个元素是否显示,可以使用 jQuery 中的 is() 方法来实现。 JS 代码: 假设这个 div 元素的 id 为 mydiv 。   以上这段代码是可以很好地判断 div 、input 、button 等元素的显示与隐藏。希望对大家有所帮助。

.NET

ASP.NET 4.5 MVC 4 无法在Windows2008的IIS7.0上解决方案

21. 十一月 2014
转自:http://www.xuebuyuan.com/46894.html   VS2012开发的MVC4调试的时候一切正常,放在Win2008的IIS7.0上死活不能运行提示----------------------------------------------HTTP 错误 403.14 - ForbiddenWeb 服务器被配置为不列出此目录的内容。 ----------------------------------------------访问http://localhost:8080/home/index提示----------------------------------------------HTTP 错误 404.0 - Not Found您要找的资源已被删除、已更名或暂时不可用。 ---------------------------------------------- 但是这台服务器运行VS2010开发的MVC3没有问题 最后Google找到如下设置,可以解决这个问题 <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer>

.NET

c#中文url转码解决办法

19. 十月 2014
HttpUtility.UrlEncode 方法 (String)

.NET

正则表达式中的(?is)干嘛用的?

11. 十月 2014
 (?i) 表示所在位置右侧的表达式开启忽略大小写模式  (?s) 表示所在位置右侧的表达式开启单行模式。 转自:http://bbs.csdn.net/topics/370224232 Q:经常看见的正则前面的 (?i) (?s) (?m) (?is) (?im) 是什么意思?A: 称为内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁。  (?i) 表示所在位置右侧的表达式开启忽略大小写模式  (?s) 表示所在位置右侧的表达式开启单行模式。  更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。  注意:(?s)通常在匹配有换行的文本时使用  (?m) 表示所在位置右侧的表示式开启指定多行模式。  更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,  而不只是与整个字符串的开头和结尾匹配。  注意:(?m)只有在正则表达式中涉及到多行的“^”和“$”的匹配时,才使用Multiline模式。  上面的匹配模式可以组合使用,比如(?is),(?im)。  另外,还可以用(?i:exp)或者(?i)exp(?-i)来指定匹配的有效范围。

.NET

正则表达式对指定的class做匹配

27. 九月 2014
正则表达式: 对指定的class做匹配 var regex = new Regex(@"(?is)<[^>]*id=""articleBody""[^>]*>(?><div[^>]*>(?<o>)|</div>(?<-o>)|(?:(?!</?div\b).)*)*(?(o)(?!))</div>", op);

.NET, C#

如何正则匹配Html标签中的文字(<p></p>)

24. 九月 2014
参考:http://zhidao.baidu.com/link?url=wq3PcwIjk_AM_Yx3Mbbe7RVviLec9513huPKP7bM6NOd0t1zDQIPG7Sj0mulWc07FOoZT951ZD3kX2jmBZCy2q 举例如果想匹配<p></p>中的文字则表达式为: var regexDesc = new Regex(@"<p.*?>(.*?)</p>", op);   操作时: Match matchDesc = regexDesc.Match(newsItem.Description); if (matchDesc.Success) { while (matchDesc.Success) { newsItem.Description = newsItem.Description.Replace(matchDesc.Value, ""); matchDesc = matchDesc.NextMatch(); } }

.NET

如何转换带T的文字类型至C#的DateTime类型(how to convert date with 'T' to/from string in C#)

16. 九月 2014
You can go from DateTime to that format with DateTime dt =newDateTime(); dt.Tostring("o"); and from that format to DateTime with DateTimeOffset.Parse(dateString); Here is some more info on DateTime format: http://www.dotnetperls.com/datetime-format

.NET, C#

C#如何mapping NameSpace Element (XML)

16. 九月 2014
假设有xml <rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> <dc:date>2014-09-16T14:33:44+09:00</dc:date> </rss> C# mapping的时候定义下文便能mapping到对应的数据   [XmlElement(ElementName = "date", Namespace = "http://purl.org/dc/elements/1.1/")] public string Time { get; set; }  

.NET, C#

如何转换一个远程图片至base64格式

16. 九月 2014
Convert Image to Base64 String and Base64 String to Image http://www.dailycoding.com/Posts/convert_image_to_base64_string_and_base64_string_to_image.aspx This article will help you to learn how we can convert an image into a base64 string and base64 string back to image. Image to Base64 String public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format) { using (MemoryStream ms = new MemoryStream()) { // Convert Image to byte[] image.Save(ms, format); byte[] imageBytes = ms.ToArray(); // Convert byte[] to Base64 String string base64String = Convert.ToBase64String(imageBytes); return base64String; } } Base64 String to Image public Image Base64ToImage(string base64String) { // Convert Base64 String to byte[] byte[] imageBytes = Convert.FromBase64String(base64String); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); // Convert byte[] to Image ms.Write(imageBytes, 0, imageBytes.Length); Image image = Image.FromStream(ms, true); return image; } String url = "http://ecx.images-amazon.com/images/I/51MVXV3QQ6L._SL500_SS150_.jpg"; Uri uri = new Uri(url); WebClient client = new WebClient(); byte[] imageBytes = client.DownloadData(uri); string base64String = Convert.ToBase64String(imageBytes); base64String.Dump(); base64String.Length.Dump(); ("<img src='data:image/jpg;base64," + "' />").Length.Dump(); client.Dispose();

.NET

c# .net Regex.Match 是不是只会返回第一个匹配,如果要返回多个匹配呢?

16. 九月 2014
转自:http://zhidao.baidu.com/question/582448287582193605.html 可以用r.Matches也可以用:Match m = r.Match("xxx");while(m.Success){ ..... m = m.NextMatch();}

.NET

MongoDB查询 正则匹配

16. 七月 2014
  db.User_aaa.find({     "Method":"bbb",     "Parameters":/123/i     })

.NET

Seiko 精工 SPC001J1

9. 七月 2014
http://www.365mx.com/Seiko/SPC001J1/9318.html 型号:SPC001J1 机芯号码:7T82 分类:石英表 功能类别:多功能 表面颜色:黑色 材料:表圈:离子电镀 其他部分:不锈钢 表镜:蓝宝石玻璃 表带型号:35A0JZ(实芯表带) 防水度:10个大气压巴 计时功能:以1/100秒为递增单位,最多可测量40分钟; 重复以上功能,最多可测量120分钟; 逆向弹跳计时码表,分段计时功能; 三折式按钮开关表扣; 螺旋表冠;螺旋底盖精工(SEIKO)是一家著名的日本制表公司,始创于 1881年,公司原名为 “服部计时店” 。1892年改名为精工舍。 1924年发明了第一只正式使用精工品牌的手表。1995年,精工舍与日本东方表公司共同创建了一间合资工厂。精工表,锐意创新,其超卓品质的设计诠释了手表工业的艺术性。谁说对立不可兼容?自1881年创立以来,精工一直都能掌握时代脉搏,以尖端科技为全球带来准确时计;时至今日,精工业已成为全球最大的钟表制造商之一,其发明及精心创制的石英表更成为今天国际时计之典范。石英表的准确性不但较一般机械手表高出三百倍,电池寿命更可长达5年,兼且不用每日重新调校和对时,比诸传统手表的确是方便得多;而继此划时代贡献后,精工秉承一贯追求完美精神,仍不断研制一些更精密先进兼简易方便的时计系列,以配合市场需要,作出更具革命性的突破!1969年 ,精工表推出了世界上第一款指针式石英手表-SEIKO ASTRON[35SQ]。1973年全球首创6位数码显示液晶体石英表。1982年 全球首创电视屏幕手表及于日本首次推出发声石英表。1988年创制全球第一只人·动·电·能(Kinetic)石英表,无须电池驱动,为钟表科技掀起革命性的一页;此外更首创设计有响闹、记时及计时功用的石英手表,准确卓越!

.NET

使用锁Lock示例:

7. 七月 2014
    private static Object thisLock = new Object(); public static ApiResult<IList<Em.Entities.Fund>> GetFunds(string uToken) { return _helper.GetCachedValue(CacheKeyPrefix.Funds, string.Empty, () => { lock (thisLock) { object fundData; CacheInstance.Local.TryGet(CacheKeyPrefix.Funds, out fundData); if (null == fundData) { ; return _service.GetFunds(); } return (ApiResult<IList<Em.Entities.Fund>>)fundData; } }, GlobalCacheExpireConfig.FundsExpire, "Local"); } List<Fund> allFundsData = null; object fundData; CacheInstance.Local.TryGet(CacheKeyPrefix.Funds, out fundData); if (null != fundData) { allFundsData = (List<Fund>)fundData; } else { lock (thisLock) { CacheInstance.Local.TryGet(CacheKeyPrefix.Funds, out fundData); if (null == fundData) { ; ResultInfo<List<Fund>> fundsResult = GetFunds(); if (fundsResult.Succeed) { allFundsData = fundsResult.Result; CacheInstance.Local.Add(CacheKeyPrefix.Funds, fundsResult.Result, new TimeSpan(2, 0, 0)); } } else { allFundsData = (List<Fund>)fundData; } } }

.NET

C#在消息投增加配置项IP

25. 四月 2014
C#在消息投增加配置项IP var client = new CoreServicesClient(); using (var scope = new OperationContextScope(client.InnerChannel)) { MessageHeader header = MessageHeader.CreateHeader("clientip", "http://tempuri.org", clientIp); OperationContext.Current.OutgoingMessageHeaders.Add(header); header = MessageHeader.CreateHeader("token", "http://tempuri.org", uToken); OperationContext.Current.OutgoingMessageHeaders.Add(header); var svcResult = client.AcceptBuy(App.FundCode, fixedBagApp.BankAccountNo, fixedBagApp.AmountOrVol, payType, fixedBagApp.ChargeType, password, reference); client.Close(); return Convert(svcResult); }

.NET

请教wcf中如何通过对象获取wcf服务器的地址?

8. 四月 2014
using (Binding.HelloClient proxy = new Binding.HelloClient()) { proxy.Endpoint.Address.Uri.Host }

.NET

C# Linq人工干预list排序

20. 三月 2014
    //cfxixi code 20140211 修改充值基金的显示顺序,不想显示的放在最后 cashBagGroupsList = cashBagGroupsList.Where(p => p.Group.GroupCode == "first").Union(cashBagGroupsList.Where(p => p.Fund.FundState == "0" && p.Group.GroupCode != "first").OrderByDescending(p => p.Nav.UnitAccrual).Union(cashBagGroupsList.Where(p => p.Fund.FundState != "0"))).ToList(); List<CashBagGroupInfo> groupBList = cashBagGroupsList.Where(p => p.Fund.FundName.Contains("B")).ToList(); List<CashBagGroupInfo> groupAList = cashBagGroupsList.Where(p => !p.Fund.FundName.Contains("B")).ToList(); object obj; CacheInstance.Couch.TryGet("AppSetting.DefFundHideMode", out obj); string defHideChargeFunds = string.Empty; if (null != obj) { defHideChargeFunds = obj.ToString(); } groupAList = (groupAList.Where(p => !defHideChargeFunds.Contains(p.Fund.FundCode)) .Union(groupAList.Where(p => defHideChargeFunds.Contains(p.Fund.FundCode)))).ToList(); groupBList = (groupBList.Where(p => !defHideChargeFunds.Contains(p.Fund.FundCode)) .Union(groupBList.Where(p => defHideChargeFunds.Contains(p.Fund.FundCode)))).ToList(); cashBagGroupsList = groupAList.Union(groupBList).ToList(); //cfxixi code end

.NET

C#定义反回一个动态类型

13. 三月 2014
  public static FundTrade.API.Common.ApiResult<MyAssetUserInfoResponseDto> MyAssetUserInfo(string customerNo) { return MyAssetPostFunc<MyAssetUserInfoResponseDto>(customerNo, "MyAssetUserInfo"); } private static FundTrade.API.Common.ApiResult<T> MyAssetPostFunc<T>(string customerNo, string funcName) { FundTrade.API.Common.ApiResult<T> result = null; string message = "Json格式错误"; try { string wapApiAddress = WapUserApiAddress; wapApiAddress = string.Format(wapApiAddress, funcName); string postData = StringUtils.GetParamertesJsonInfo("uid", customerNo); string postResult = StringUtils.GetPostJsonInfo(wapApiAddress, postData, "UTF-8"); result = FundTrade.API.Common.JsonHelper.FromJson<FundTrade.API.Common.ApiResult<T>>(postResult); } catch (Exception ex) { message = ex.Message; } if (result == null) result = FundTrade.API.Common.ApiResult<T>.MakeFailedResult(message); return result; }

.NET, C#

C#定义属性(生成一个永远不会重复的ID字段)

12. 三月 2014
定义属性(生成一个永远不会重复的ID字段) private string _id; public string Id { get { return _id ?? (_id = DateTime.Now.ToUniversalTime().Ticks + "-" + new Random().Next(1000000)); } set { _id = value; } }

.NET, C#

从客户端中检测到有潜在危险的Request.Form值的解决方法

6. 三月 2014
转自:http://www.cnblogs.com/allon6318/archive/2013/05/28/3103453.html   使用VS2010开发WEB系统时,ASP.NET请求验证功能可以为我们自动辨别来自客户端提交的数据,避免站点受到XSS的攻击。但是在一些特殊情况下,比如我们使用富文本编辑器让用户输入一篇新闻,新闻内容包括文字,图片等,还有排版格式等,当客户端将文本内容提交给服务器时,服务器如果辨识出文本中包含有一些不被允许的特殊字符或者标签,将阻止内容的提交。但是这部分内容是用户的“合法输入内容”,这时候的请求验证势必是多余的。所以为了应对这种问题,我们可以采用以下处理方式。   第一种情况:WEB应用程序开发中 (1)在全局配置文件webconfig中添加配置:<httpRuntime requestValidateMode="2.0"> 比如: <system.web>   < httpRuntime requestValidationMode ="2.0 " /> </system.web> (2)在包含有富文本编辑器页面上添加属性:ValidateRequest="false" 比如: <% @ Page ValidateRequest="false" %>   第二种情况:MVC应用程序开发中 (1)在全局配置文件webconfig中添加配置:<httpRuntime requestValidateMode="2.0"> 比如: < system.web>   < httpRuntime requestValidationMode = "2.0 "  /> </ system.web> (2)在包含有富文本编辑器的视图对应的Controll中添加属性:ValidateInput(false) 比如: [ HttpPost] [ ValidateInput(false )] public ActionResult NewsEdit( FormCollection form) {}  

.NET

C#数字转大写金额

25. 二月 2014
  #region 数字转大写中文 /// <summary> /// 转大写金额 /// </summary> /// <param name="d"></param> /// <returns></returns> public static string NumToUpper(decimal d) { if (d == 0) return "零元"; string je = d.ToString("####.00"); if (je.Length > 15) return ""; je = new String('0', 15 - je.Length) + je; //若小于15位长,前面补0 string stry = je.Substring(0, 4); //取得'亿'单元 string strw = je.Substring(4, 4); //取得'万'单元 string strg = je.Substring(8, 4); //取得'元'单元 string strf = je.Substring(13, 2); //取得小数部分 string str1 = "", str2 = "", str3 = ""; str1 = getupper(stry, "亿"); //亿单元的大写 str2 = getupper(strw, "万"); //万单元的大写 str3 = getupper(strg, "元"); //元单元的大写 string str_y = "", str_w = ""; if (je[3] == '0' || je[4] == '0') //亿和万之间是否有0 str_y = "零"; if (je[7] == '0' || je[8] == '0') //万和元之间是否有0 str_w = "零"; string ret = str1 + str_y + str2 + str_w + str3; //亿,万,元的三个大写合并 for (int i = 0; i < ret.Length; i++) //去掉前面的"零" { if (ret[i] != '零') { ret = ret.Substring(i); break; } } for (int i = ret.Length - 1; i > -1; i--) //去掉最后的"零" { if (ret[i] != '零') { ret = ret.Substring(0, i + 1); break; } } if (ret[ret.Length - 1] != '元') //若最后不位不是'元',则加一个'元'字 ret = ret + "元"; if (ret == "零零元") //若为零元,则去掉"元数",结果只要小数部分 ret = ""; if (strf == "00") //下面是小数部分的转换 { ret = ret + "整"; } else { string tmp = ""; tmp = getint(strf[0]); if (tmp == "零") ret = ret + tmp; else ret = ret + tmp + "角"; tmp = getint(strf[1]); if (tmp != "零") ret = ret + tmp + "分"; } if (ret[0] == '零') { ret = ret.Substring(1); //防止0.03转为"零叁分",而直接转为"叁分" } return ret; //完成,返回 }

.NET

关于使用ZXing扫描二维码出现中文乱码的问题

24. 二月 2014
转自:http://blog.csdn.net/yu413854285/article/details/7061462 最近项目的功能需要用到扫描二维码.就参考了google的开源项目ZXing..功能完成后..发现扫条形码没有问题..但是扫描二维码的时候却有一部分是乱码..或者不是中文的问题..于网上参考了很资料.但效果还是不太理想..后来发现只要以ISO-8859-1的格式来编码,取出结果再进行相应的转换..问题就解决了.并不需要修改源码:以下是修改的方法第一:先在CaptureActivity类中设置它的默认编码   [java] view plaincopy   decodeFormats = null;   characterSet = "ISO-8859-1";     第二:你在取回结果的Activity中转换相应的编码.这里我是在ResultActivity类里作处理的 [java] view plaincopy   public class ResultActivity extends Activity implements OnClickListener{          private TextView dec_result;       private String resultStr;       private ImageView codeImage;       private Button returnChoujiang,returnJubao;       @Override       protected void onCreate(Bundle savedInstanceState) {           // TODO Auto-generated method stub           super.onCreate(savedInstanceState);           setContentView(R.layout.dec_result);           init();           dec_result=(TextView)findViewById(R.id.dec_result);           codeImage=(ImageView)findViewById(R.id.code_image);           Intent intent=getIntent();           resultStr=intent.getStringExtra("result");           String UTF_Str="";           String GB_Str="";           boolean is_cN=false;           try {               System.out.println("------------"+resultStr);               UTF_Str=new String(resultStr.getBytes("ISO-8859-1"),"UTF-8");               System.out.println("这是转了UTF-8的"+UTF_Str);               is_cN=IsChineseOrNot.isChineseCharacter(UTF_Str);               //防止有人特意使用乱码来生成二维码来判断的情况               boolean b=IsChineseOrNot.isSpecialCharacter(resultStr);               if(b){                   is_cN=true;               }               System.out.println("是为:"+is_cN);               if(!is_cN){                   GB_Str=new String(resultStr.getBytes("ISO-8859-1"),"GB2312");                   System.out.println("这是转了GB2312的"+GB_Str);               }           } catch (UnsupportedEncodingException e) {               // TODO Auto-generated catch block               e.printStackTrace();           }                                 Bitmap bm=intent.getParcelableExtra("IMG_return");           if(is_cN){               dec_result.setText(UTF_Str);           }else{               dec_result.setText(GB_Str);           }           codeImage.setImageBitmap(bm);                      returnChoujiang.setOnClickListener(this);           returnJubao.setOnClickListener(this);       }   第三:以下就是判断是否在Unicode编码里 [java] view plaincopy   public class IsChineseOrNot {              public static final boolean isChineseCharacter(String chineseStr) {             char[] charArray = chineseStr.toCharArray();             for (int i = 0; i < charArray.length; i++) {                    //是否是Unicode编码,除了"�"这个字符.这个字符要另外处理               if ((charArray[i] >= '\u0000' && charArray[i] < '\uFFFD')||((charArray[i] > '\uFFFD' && charArray[i] < '\uFFFF'))) {                     continue;               }               else{                   return false;               }           }             return true;         }                public static final boolean isSpecialCharacter(String str){           //是"�"这个特殊字符的乱码情况           if(str.contains("�")){               return true;           }           return false;       }   }     最后这样就解决了ZXing的中文乱码问题.     以上只是本人在工作中解决问题的记录.并不是什么技术文档.只供本人做一个记录.

.NET

【.Net】构造函数如何继承

8. 二月 2014
  举例: public TraceStepInterfaceWrapper(TraceInfo trace, string op) : base(trace, op) { }

.NET

win7使用VPN教程

27. 一月 2014
Win7 建立VPN步骤 Win7 建立VPN步骤 1、打开网络连接,点击“设置新的连接或网络”。 2、选择“连接到工作区”,创建VPN连接。   3、输入Internet地址,学校VPN服务器的地址是:vpn.fjut.edu.cn 。 4、输入您的VPN用户名和密码。 5、关闭设置页面。 6、点击VPN连接,在VPN连接窗口中,点击“属性”按钮进行相关设置。 在弹出的属性对话框中,点击“安全”选项卡,按照如下图所示的对“VPN类型”和“数据加密”进行设置。 部分电脑会出现获取不到DNS地址的情况,造成只能通过IP地址访问网站而不能通过域名(如http://lib.fjut.edu.cn/)访问。需要进行如下设置:(1)在属性对话框上选择“网络”选项卡,双击“Internet协议版本4(TCP/IPv4)”进行设置。 (2)将DNS服务器的地址按照下图进行设置。 7、点击“连接”按钮,进行连接,连接成功后即可通过VPN登录校内的各个系统或网站。

.NET

c#从数组中查找对应的记录

9. 一月 2014
  var list = new[] { "aa", "bb", "ac" }; var result = Array.FindAll(list, s => (s.IndexOf("a") > -1)); foreach (var v in result) Console.WriteLine(v);

.NET, C#

.net全站过滤url危险参数,防注入(防止蠕虫传播)

8. 一月 2014
参考:http://blog.csdn.net/mngzilin/article/details/4959759 在global文件中添加如下代码: void Application_BeginRequest(object sender, EventArgs e) { //遍历Post参数,隐藏域除外 if (Regex.IsMatch(Request.RawUrl.ToLower(), @"/manager/") == false) for (int i = 0; i < Request.Form.Count; i++) { if (Request.Form[i] == "__VIEWSTATE") continue; if (IsDanger(Request.Form[i])) { Response.Write("您提交的内容中含有非法字符,已经被拒绝."); Response.End(); } } //过滤所有Url中的危险字符串 if (Request.QueryString.Count > 0 && !Regex.IsMatch(Request.RawUrl.ToLower(), @"fckeditor"))//如果防止截获fckeditor正常的Url,必须验证".aspx" { string Temp = ""; //string Url = Request.Url.AbsoluteUri.Substring(0, Request.Url.AbsoluteUri.LastIndexOf("?")); string Url = Request.RawUrl.Substring(0, Request.RawUrl.LastIndexOf("?", System.StringComparison.Ordinal)); for (int i = 0; i < this.Request.QueryString.Count; i++) { try { Temp = HandleRequestParam(this.Request.QueryString[i]); Url += i == 0 ? "?" : "&"; Url += Request.QueryString.Keys[i] + "=" + Temp; } catch { } } //if (Url.Length < Request.Url.AbsoluteUri.Length) // Response.Redirect(Url); Context.RewritePath(Url);//可以用Response.Redirect和Context.RewritePath } //全站防止页面缓存 Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1); Response.Expires = 0; Response.CacheControl = "no-cache"; } protected string HandleRequestParam(string str) { string RetStr = ""; char[] strC = str.ToLower().ToCharArray(); for (int i = 0; i < strC.Length; i++) { if (Convert.ToInt32(strC[i]) >= 48 && Convert.ToInt32(strC[i]) <= 57) RetStr += strC[i].ToString(); else break; } return RetStr; } protected bool IsDanger(string InText) { string word = @"exec|insert|select|delete|update|master|truncate|char|declare|join|iframe|href|script|<|>|request"; if (InText == null) return false; if (Regex.IsMatch(InText, word)) return true; return false; }

.NET

封装从Cache中取数据

6. 一月 2014
调用: CacheInstance.Couch.Get<string>(verifyCodeKey);   需要工具类 public static class CacheInstance { public static ICachePolicy Local { get { return CacheBuilder.Instance["Local"]; } } public static ICachePolicy Couch { get { return CacheBuilder.Instance["Couch"]; } } public static ICachePolicy Redis { get { return CacheBuilder.Instance["Redis"]; } } public static ICachePolicy CouchLocal { get { return CacheBuilder.Instance["CouchLocal"]; } } public static ICachePolicy LocalCouch { get { return CacheBuilder.Instance["LocalCouch"]; } } public class CacheCollection { private static IDictionary<string, ICachePolicy> _allCache = new Dictionary<string, ICachePolicy>(); private static void InitAllCache() { _allCache["Local"] = Local; _allCache["Couch"] = Couch; _allCache["Redis"] = Redis; _allCache["CouchLocal"] = CouchLocal; _allCache["LocalCouch"] = LocalCouch; } public ICachePolicy this[string name] { get { if (!_allCache.Any()) { lock(_allCache) { if (!_allCache.Any()) { InitAllCache(); } } } return _allCache[name]; } } } public static CacheCollection Collection = new CacheCollection(); }   引用相关:    public interface ICachePolicy { void Add(string key, object value, TimeSpan expire); void Remove(string key); TData Get<TData>(string key); TData Get<TData>(string key, TimeSpan newExpiration); bool TryGet<TData>(string key, out TData value); bool TryGet<TData>(string key, TimeSpan newExpiration, out TData value); } public interface ICasCachePolicy : ICachePolicy { CasedResult<bool> CasAdd(string key, object value, TimeSpan expire, ulong cas); CasedResult<TData> GetWithCas<TData>(string key); } public class CasedResult<TData> { public TData Result { get; set; } public ulong Cas { get; set; } } public interface IMixedCachePolicy : ICachePolicy { void SetPolicies(params ICachePolicy[] policies); ICachePolicy[] Policies { get; } }   以及 public class CacheBuilder { private StructureMap.Container _container = new StructureMap.Container(); private class Nested { static Nested() { } internal static readonly CacheBuilder Builder = new CacheBuilder(); } public static CacheBuilder Instance { get { return Nested.Builder; } } public CacheBuilder() { Init(); } private void Init() { _container.Configure(config => { config.ForSingletonOf<ICachePolicy>().Use(context => new RuntimeCachePolicy()).Named("Local"); config.ForSingletonOf<ICachePolicy>().Use(context => new CouchBasePolicy()).Named("Couch"); config.ForSingletonOf<ICachePolicy>().Use(context => new RedisCachePolicy()).Named("Redis"); }); _container.Configure(config => { config.ForSingletonOf<ICachePolicy>().Use(context => new MixedCachePolicy(this["Couch"], this["Local"])).Named("CouchLocal"); config.ForSingletonOf<ICachePolicy>().Use(context => new MixedCachePolicy(this["Local"], this["Couch"])).Named("LocalCouch"); }); } public ICachePolicy this[string key] { get { return _container.GetInstance<ICachePolicy>(key); } } } 还有 internal class RuntimeCachePolicy : ICachePolicy { public void Add(string key, object value, TimeSpan expire) { HttpRuntime.Cache.Add(key, value, null, DateTime.Now.Add(expire), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.High, OnRemove); } public void Remove(string key) { HttpRuntime.Cache.Remove(key); } private object Get(string key) { return HttpRuntime.Cache.Get(key); } private object Get(string key, TimeSpan newExpiration) { var obj = Get(key); if (obj != null) { Add(key, obj, newExpiration); } return obj; } public TData Get<TData>(string key) { return (TData) Get(key); } public TData Get<TData>(string key, TimeSpan newExpiration) { return (TData)Get(key, newExpiration); } public bool TryGet<TData>(string key, out TData value) { var obj = Get(key); value = (TData) obj; return obj != null; } public bool TryGet<TData>(string key, TimeSpan newExpiration, out TData value) { var got = TryGet(key, out value); if (got) { Add(key, value, newExpiration); } return got; } private void OnRemove(string key, object val, CacheItemRemovedReason reason) { switch (reason) { case CacheItemRemovedReason.DependencyChanged: { break; } case CacheItemRemovedReason.Expired: { break; } case CacheItemRemovedReason.Removed: { break; } case CacheItemRemovedReason.Underused: { break; } default: break; } } }

.NET

【.Net】定义泛型方法的一个简单示例

28. 十二月 2013
【.Net】定义泛型方法的一个简单示例 /// <summary> /// 读可序列化实体的XML日志 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="Path"></param> /// <returns></returns> public static T ReadSerXmlLog<T>(string Path) { if (Directory.Exists(Path)) { XmlSerializer serializer = new XmlSerializer(typeof(T)); XmlReader xr = XmlReader.Create(Path, null); T x = (T)serializer.Deserialize(xr); return x; } else return default(T); } 【.Net】定义泛型方法的一个简单示例

.NET

【.Net】使用Topshelf搭建Windows service监听XML的改动情况并动态更新Cache

26. 十二月 2013
1.新建一个控制台程序 2.使用nuget引用最新的Topshelf.dll,也可以直接去网站下载并引用。 3.首先编辑控制台程序入口program.cs的调用代码 static void Main(string[] args) { try { Main2(args); } catch (Exception ex) { Console.WriteLine(ex.Message); } } static void Main2(string[] args) { var host = HostFactory.New(x => { x.Service<Main>(s => { s.ConstructUsing(name => new Main()); s.WhenStarted(tc => tc.Start()); s.WhenStopped(tc => tc.Stop()); }); x.RunAsLocalSystem(); var desc = ConfigurationManager.AppSettings["WSServiceDesc"]; var serviceName = ConfigurationManager.AppSettings["WSServiceName"]; x.SetDescription(desc); x.SetDisplayName(serviceName); x.SetServiceName(serviceName); }); host.Run(); } 当服务启动时,我们会调用Main.cs中的启动代码以及方法。 4.程序开始时会执行Main.cs中的Start方法,start方法中的代码逻辑应当是传入所在XML文件夹的地址(docDict即为文件路径) var xmlRefreshCacheService = new XmlRefreshCacheOperateService(); var docDict = ConfigurationManager.AppSettings["XmlDocAddress"]; if (docDict != null) xmlRefreshCacheService.OperateStart(Path.Combine(docDict));   5.在operateStart方法里面定义当xml文件发生改变时的事件逻辑,下方逻辑便是要将文件路径中的所有的xml拿出进行事件的监听, 一旦发生改动自动执行updateCouch方法去主动更新缓存(Log类下载:http://bbs.cfxixi.com/showtopic-686.aspx) private static FileSystemWatcher fsw = null; public void OperateStart(string filePath) { try { fsw = new FileSystemWatcher(filePath); fsw.EnableRaisingEvents = true; fsw.Filter = "*.xml"; fsw.Changed += OnChanged; } catch (Exception err) { Log.WriteLog(err.Message); } } public static void OnChanged(object source, FileSystemEventArgs e) { try { if (File.Exists(e.FullPath)) { UpdateCouch(e.FullPath,e.Name); } else { } } catch (Exception exp) { Log.WriteLog(exp.Message); } } 6.第六步是通过Xml的名字从DLL中自动找到相同名称的class //动态加载程序集 var assemblyLoadFrom = ConfigurationManager.AppSettings["AssemblyLoadFrom"]; Assembly myAssembly = Assembly.LoadFrom(assemblyLoadFrom); //获得程序集里的所有类 var classNameSpace = ConfigurationManager.AppSettings["ClassNameSpace"]; Type myType = myAssembly.GetType(classNameSpace + Path.GetFileNameWithoutExtension(filePath)); 7.第七步拿到对象类型并且读取Xml文件(将XML里面的内容反序列化成对象) var ser = new XmlSerializer(myType); var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); object root = ser.Deserialize(fs); fs.Close(); fs.Dispose(); var rootObj = root as Root; var textHelpObj = root as HelpTextConfig; 8.最后存入couch并打印结果的JSON var storeTime = Convert.ToInt32(ConfigurationManager.AppSettings["StoreCouchTime"]); if (rootObj != null) { foreach (Appsettings ass in rootObj.App) { string key = StringConst.Prefix + "AppSetting." + ass.Name; object value; if (CacheInstance.Couch.TryGet(key, out value)) { CacheInstance.Couch.Remove(key); } CacheInstance.Couch.Add(key, ass.Value, new TimeSpan(0, 0, 0, storeTime, 0)); try { Log.WriteLog(string.Format("更新:变量名:{0},OLD值{1},NEW值{2}.", ass.Name, value, ass.Value)); } catch { } } } else if (textHelpObj != null) { foreach (HelpTextItem textItem in textHelpObj.TextList) { string key = StringConst.Prefix + "TextHelp." + textItem.Key; object value; if (CacheInstance.Couch.TryGet(key, out value)) { CacheInstance.Couch.Remove(key); } CacheInstance.Couch.Add(key, textItem, new TimeSpan(0, 0, 0, storeTime, 0)); try { var jsonResult = JsonHelper.ToJson(textItem); Log.WriteLog(string.Format("更新:变量名:{0},OLD值{1},NEW值{2}.", textItem.Key, value, jsonResult)); } catch { } } } else { string key = StringConst.Prefix + fileName; object value; if (CacheInstance.Couch.TryGet(key, out value)) { CacheInstance.Couch.Remove(key); } CacheInstance.Couch.Add(key, root, new TimeSpan(0, 0, 0, storeTime, 0)); try { var jsonResult = JsonHelper.ToJson(root); Log.WriteLog(string.Format("更新:变量名:{0},OLD值{1},NEW值{2}.", fileName, value, jsonResult)); } catch { } }

.NET

【.Net】如何将Enum类型序列化成Xml并保存

26. 十二月 2013
1.首先定义Model、定义Enum的结构 public enum HelpTextEnum { Test1, Test2, Test3, } [XmlRoot("HelpTextConfig")] public class HelpTextConfig { [XmlElement("HelpTextItem")] public List<HelpTextItem> TextList { get; set; } } public class HelpTextItem { [XmlAttribute("Key")] public HelpTextEnum Key { get; set; } [XmlAttribute("Text")] public string Text { get; set; } } 2.新建一个实例并序列化成XML的逻辑代码: var enumArr = new HelpTextConfig(); enumArr.TextList = new List<HelpTextItem>(); var item = new HelpTextItem(); item.Key = HelpTextEnum.Test1; item.Text = “萨达撒萨达撒大大”; enumArr.TextList.Add(item); XmlSerialHelper.SerializeObject(@"D:\abc.xml", enumArr); HelpTextConfig banks2 = XmlSerialHelper.DeserializeObject<HelpTextConfig>(@"D:\abc.xml"); int c = banks2.TextList.Count;   3.生成的XML格式如下: <?xml version="1.0" encoding="utf-8"?> <HelpTextConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <HelpTextItem Key="Test1" Text="撒大大萨达啊" /> </HelpTextConfig> 4.大功告成,未来将这个XML自动读取转存CouchBase  

.NET

List<T> 中的T能否动态生成 (动态生成List<T>)

23. 十二月 2013
转自:http://bbs.csdn.net/topics/360129652 List<T> 中的T能否动态生成(动态生成List<T>)  static void Main() { object intList = MakeList(typeof(int), 1, 2, 3); object strList = MakeList(typeof(string), "sdfd", "fet"); //List<int> foreach(object obj in (System.Collections.IEnumerable)intList) Console.WriteLine(obj); //List<string> foreach(object obj in (System.Collections.IEnumerable)strList) Console.WriteLine(obj); } static object MakeList(Type t, params object[] items) { Type type = typeof(List<>).MakeGenericType(t); object list = Activator.CreateInstance(type); System.Collections.IList ilist = list as System.Collections.IList; foreach (object o in items) ilist.Add(o); return list; }  

.NET

一个简单的将对象导出保存至Xml的帮助类(XML帮助类)

20. 十二月 2013
同时可以将文件读入并反序列化成对象 public static void SerializeObject<TConfig>(string filename, TConfig config) where TConfig : class { var mySerializer = new XmlSerializer(typeof(TConfig)); var writer = new StreamWriter(filename); mySerializer.Serialize(writer, config); writer.Close(); } public static TConfig DeserializeObject<TConfig>(string filename) where TConfig : class { var mySerializer = new XmlSerializer(typeof(TConfig)); var reader = new StreamReader(filename); var t = mySerializer.Deserialize(reader); reader.Close(); return t as TConfig; } }

.NET

使用Topshelf 5步创建Windows 服务

18. 十二月 2013
转自:http://www.cnblogs.com/shanyou/archive/2011/05/04/2037008.html 使用Topshelf创建Windows 服务简要的介绍了创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务。Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。 1、Topshelf的代码托管在http://topshelf-project.com/,可以在这里下载到最新的代码。 2、使用Visual Studio创建一个控制台应用程序引用程序集TopShelf.dll 合log4net.dll 。 3、创建一个简单的服务类,里面包含两个方法Start和Stop,这个服务只是演示代码,所以我们每隔5秒输出一个日志。 using System;using System.Timers;using log4net;namespace SampleWindowsService{public class SampleService{private Timer _timer = null;readonly ILog _log = LogManager.GetLogger(typeof(SampleService));public SampleService(){double interval = 5000;_timer = new Timer(interval);_timer.Elapsed += new ElapsedEventHandler(OnTick);}protected virtual void OnTick(object sender, ElapsedEventArgs e){_log.Debug("Tick:" + DateTime.Now.ToLongTimeString());}public void Start(){_log.Info("SampleService is Started");_timer.AutoReset = true;_timer.Enabled = true;_timer.Start();}public void Stop(){_log.Info("SampleService is Stopped");_timer.AutoReset = false;_timer.Enabled = false;}}} 4、在Main方法中使用Topshelf宿主我们的服务,主要是告诉Topshelf如何设置我们的服务的配置和启动和停止的时候的方法调用。 using System.IO;using log4net.Config;using Topshelf;namespace SampleWindowsService{class Program{static void Main(string[] args){XmlConfigurator.ConfigureAndWatch(new FileInfo(".\\log4net.config"));var host = HostFactory.New(x =>{x.EnableDashboard();x.Service<SampleService>(s =>{s.SetServiceName("SampleService");s.ConstructUsing(name => new SampleService());s.WhenStarted(tc =>{XmlConfigurator.ConfigureAndWatch(new FileInfo(".\\log4net.config"));tc.Start();});s.WhenStopped(tc => tc.Stop());});x.RunAsLocalSystem();x.SetDescription("SampleService Description");x.SetDisplayName("SampleService");x.SetServiceName("SampleService");});host.Run();}}} 4、配置Log4net和运行我们的服务,服务可以当作控制台来运行,这在开发的时候是非常方便的。服务的安装很方便 SampleWindowsService.exe install 安装成功后,可以通过服务控制台启动,或者也可以通过一下命令运行 SampleWindowsService.exe start 服务的卸载方法也非常简单了 SampleWindowsService.exe uninstall

.NET