CFXIXI工作室首页
CF西西的博客 | C#

redis安装教程

27. 六月 2015
redis安装教程:http://www.cnblogs.com/haogj/p/3587943.html

C#

C#基本功如何写服务器的日志

31. 三月 2015
try { System.IO.File.AppendAllText(@"d:\Log\Log_Service\log.log", string.Format(@"cust:{0};path:{1}{2}", customerNo, filePath, Environment.NewLine)); } catch (Exception) { //throw; }

C#

.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#

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

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

.NET, C#

System.Text.RegularExpressions.Regex如何做到不区分大小写

23. 九月 2014
参考:http://www.cnblogs.com/foundation/archive/2008/06/04/1213368.html System.Text.RegularExpressions.RegexOptions op; op = System.Text.RegularExpressions.RegexOptions.IgnoreCase;//不区分大小写 System.Text.RegularExpressions.Regex obj; obj = new System.Text.RegularExpressions.Regex(Estring, op);  

C#

如何转换带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#

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#

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#

配置Webconfig让webapi跨域

2. 一月 2014
转自:http://www.figers.com/Blog/2013/03/21/enable-access-control-allow-origin-in-iis6-iis7-for-webapi-calls/ To allow your newly created webapi web service calls to be accessed from ajax post calls from another website you need to enable this setting in either IIS6 or IIS7 IIS6 Open Internet Information Service (IIS) Manager Right click the site you want to enable CORS for and go to Properties Change to the HTTP Headers tab In the Custom HTTP headers section, click Add Enter Access-Control-Allow-Origin as the header name Enter * as the header value Click Ok twice IIS7 – Add this to your web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer> </configuration>

C#

c#定义枚举型示例

25. 十二月 2013
定义枚举型示例 public enum EnumBaseTA { [EnumText("业务类型:认1")] RA = 1, [EnumText("业务类型:申1")] SA = 2, [EnumText("业务类型:赎1")] RA = 3, [EnumText("业务类型:设1")] DA = 4, [EnumText("业务类型:转1")] TA = 5, [EnumText("业务类型:定1")] DIA = 6, [EnumText("业务类型:红1")] PA = 7 }

C#

使用 Sandcastle 生成 chm 帮助文档

25. 十二月 2013
转自:http://www.cnblogs.com/netatomy/archive/2008/01/24/1050769.html 在上篇文章(编写并生成文档注释)中,我们已经了解了如何为类型和成员编写文档注释,以及如何生成相应的文档注释文件。在本文中,将简单地介绍如何使用 Sandcastle 生成 chm 文档。  Sandcastle 是一个文档生成工具,可以用它生成 MSDN 风格的文档,既能够生成 chm 文档,也能够生成 MS Help 2.x 帮助文档。在此之前曾流行的 NDoc,其作者已经放弃更新。  首先到 CodePlex 下载并安装 Sandcastle,目前最新版本是 Sandcastle January 2008 Release。安装后 Sandcastle 会创建一个系统环境变量 DXROOT,不要删除,因为 Sandcastle 要用这个环境变量。注意,如果之前安装过 Visual Studio 2005 SDK(安装它就意味着安装了早期版本的 Sandcastle),请删除用户环境变量 DXROOT,否则将影响新版本的使用。安装完成后,可以到安装目录下的 Examples 文件夹中看一看,这里有一些示例,可以用于研究 Sandcastle 的用法。 然后,准备好你的程序集和文档注释文件,我使用的是上篇文章中创建的 Hello.dll 和 Hello.xml。  接着,到 Sandcastle 安装目录下,把 Examples\sandcastle 文件夹下的 build_sandcastle.bat 文件复制到你的文件夹下,和 Hello.dll 以及 Hello.xml 放在一起。 最后,打开命令行,进入到这个目录,输入:build_sandcastle.bat vs2005 Hello chm <回车>。后面会出现很多信息,等这个批处理程序结束后,能看到多出了许多文件和文件夹。如果中间没有出现问题的话,进入 chm 文件夹,将会看到一个 Hello.chm 文件,这就是我们最终想要得到的——帮助文档,打开看一看吧,是不是挺漂亮的。下面是截图:

C#

单元测试(如何序列化导出至xml并读取反序列化)

20. 十二月 2013
单元测试(如何序列化导出至xml并读取反序列化) [TestClass] public class UnitTest1 { [TestMethod] public void TestSerialize() { var banks = new Banks(); banks.BankInfo = new List<BankPayConfigInfo>(); banks.BankInfo.Add(new BankPayConfigInfo()); XmlSerialHelper.SerializeObject(@"D:\abc.xml", banks); var banks2 = XmlSerialHelper.DeserializeObject<Banks>(@"D:\abc.xml"); var c = banks2.BankInfo.Count; Assert.Inconclusive("success"); } }   引用Xml的帮助类 public static class XmlSerialHelper { 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; } }  

C#

c#动态查找DLL中的Class

19. 十二月 2013
参考:http://hi.baidu.com/wtnzone/item/ba6da9bf5300c6422bebe37b //动态加载程序集DynamicAssembly.dll Assembly myAssembly = Assembly.LoadFrom("DynamicAssembly.dll"); //获得程序集里的所有类 Type[] types = myAssembly.GetTypes(); //找到程序集里的Person类 Type myType = null; foreach (Type type in types) { if (type.Name == "Person") { myType = type; } } //创建这个动态类的实例 object o = Activator.CreateInstance(myType, new object[] { "shinichi_wtn", 22 }); //执行类中的Print方法 IPersonControl iPerson = o as IPersonControl; iPerson.Print(); Console.Read();更简单的: //动态加载程序集FundTrade.API.DTO.dll Assembly myAssembly = Assembly.LoadFrom("FundTrade.API.DTO.dll"); //获得程序集里的所有类 Type myType = myAssembly.GetType(fileName);

C#

一个很简洁的C# Json序列化与反序列化帮助类

7. 十一月 2013
  public static class JsonHelper { public static string ToJson(object t) { try { return new JavaScriptSerializer().Serialize(t); } catch (Exception ex) { } return ""; } public static TData FromJson<TData>(string json) { try { return new JavaScriptSerializer().Deserialize<TData>(json); } catch (Exception ex) { } return Activator.CreateInstance<TData>(); } }   使用方法: var userCode = JsonHelper.ToJson(user);

.NET, C#

C#.Net使用小工具AutoMapper.dll完美复制一个对象

7. 十一月 2013
首先我们要拥有dll:http://bbs.cfxixi.com/showtopic-1034.aspx 1.建立一个工具类: public class MapperHelp { public static TDest Convert<TSrc, TDest>(TSrc src) { return AutoMapper.Mapper.Map<TSrc, TDest>(src); } public static void MakeMap<TSrc, TDest>() { AutoMapper.Mapper.CreateMap<TSrc, TDest>(); AutoMapper.Mapper.CreateMap<TDest, TSrc>(); } public static void MakeSingleMap<TSrc, TDest>() { AutoMapper.Mapper.CreateMap<TSrc, TDest>(); } }   2.建立一个实例化的方法 public class ModuleInit { public static void Init() { InitMappers(); } private static void InitMappers() { //todo: add mappers MapperHelp.MakeSingleMap<CustomerDetail, CustomerDetail>(); } }   3.在global.asax Application_Start事件中初始化调用 ModuleInit.Init();   4.这样便能调用了,targetObj便是复制好的目标对象 var targetObj= MapperHelp.Convert<CustomerDetail, CustomerDetail>(detail);

C#

DAO和DTO的区别

7. 十一月 2013
参考:http://blog.csdn.net/zcywell/article/details/7204186 DAO: data   access   object数据访问对象 主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO     DTO   : Data   Transfer   Object数据传输对象 主要用于远程调用等需要大量传输对象的地方。 比如我们一张表有100个字段,那么对应的PO就有100个属性。 但是我们界面上只要显示10个字段, 客户端用WEB   service来获取数据,没有必要把整个PO对象传递到客户端, 这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO 

.NET, C#

C#使用反射对一个相同类型的对象进行复制(无需手工点出属性赋值)

7. 十一月 2013
方法很容易创建实例然后枚举出属性名和属性值再赋值到另一相同类的对象中 自动获取对象中类型的办法是参考:http://blog.csdn.net/xiaohan2826/article/details/8536074 Type type = typeof(CustomerDetail); object obj = Activator.CreateInstance(type); PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo p in props) { string elementName = p.Name.Substring(0); object elementValue = p.GetValue(detail, null); var property = obj.GetType().GetProperty(elementName); p.SetValue(obj, Convert.ChangeType(elementValue, property.PropertyType), null); }

C#

C#动态添加属性

24. 十月 2013
转自:http://blog.csdn.net/xiaoguang44/article/details/6989404#3010137 using System; using System.Collections.Generic; using System.Reflection.Emit; using System.Reflection; using System.Threading; //李剑 namespace CopyMapFile { /**//// <summary> /// 类帮助器,可以动态对类,类成员进行控制(添加,删除),目前只支持属性控制。 /// 注意,属性以外的其它成员会被清空,功能还有待完善,使其不影响其它成员。 /// </summary> public class ClassHelper { #region 公有方法 /**//// <summary> /// 防止实例化。 /// </summary> private ClassHelper() { } /**//// <summary> /// 根据类的类型型创建类实例。 /// </summary> /// <param name="t">将要创建的类型。</param> /// <returns>返回创建的类实例。</returns> public static object CreateInstance(Type t) { return Activator.CreateInstance(t); } /**//// <summary> /// 根据类的名称,属性列表创建型实例。 /// </summary> /// <param name="className">将要创建的类的名称。</param> /// <param name="lcpi">将要创建的类的属性列表。</param> /// <returns>返回创建的类实例</returns> public static object CreateInstance(string className, List<CustPropertyInfo> lcpi) { Type t = BuildType(className); t = AddProperty(t, lcpi); return Activator.CreateInstance(t); } /**//// <summary> /// 根据属性列表创建类的实例,默认类名为DefaultClass,由于生成的类不是强类型,所以类名可以忽略。 /// </summary> /// <param name="lcpi">将要创建的类的属性列表</param> /// <returns>返回创建的类的实例。</returns> public static object CreateInstance(List<CustPropertyInfo> lcpi) { return CreateInstance("DefaultClass", lcpi); } /**//// <summary> /// 根据类的实例设置类的属性。 /// </summary> /// <param name="classInstance">将要设置的类的实例。</param> /// <param name="propertyName">将要设置属性名。</param> /// <param name="propertSetValue">将要设置属性值。</param> public static void SetPropertyValue(object classInstance, string propertyName, object propertSetValue) { classInstance.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, classInstance, new object[] { Convert.ChangeType(propertSetValue, propertSetValue.GetType()) }); } /**//// <summary> /// 根据类的实例获取类的属性。 /// </summary> /// <param name="classInstance">将要获取的类的实例</param> /// <param name="propertyName">将要设置的属性名。</param> /// <returns>返回获取的类的属性。</returns> public static object GetPropertyValue(object classInstance, string propertyName) { return classInstance.GetType().InvokeMember(propertyName, BindingFlags.GetProperty, null, classInstance, new object[] { }); } /**//// <summary> /// 创建一个没有成员的类型的实例,类名为"DefaultClass"。 /// </summary> /// <returns>返回创建的类型的实例。</returns> public static Type BuildType() { return BuildType("DefaultClass"); } /**//// <summary> /// 根据类名创建一个没有成员的类型的实例。 /// </summary> /// <param name="className">将要创建的类型的实例的类名。</param> /// <returns>返回创建的类型的实例。</returns> public static Type BuildType(string className) { AppDomain myDomain = Thread.GetDomain(); AssemblyName myAsmName = new AssemblyName(); myAsmName.Name = "MyDynamicAssembly"; //创建一个永久程序集,设置为AssemblyBuilderAccess.RunAndSave。 AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave); //创建一个永久单模程序块。 ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name + ".dll"); //创建TypeBuilder。 TypeBuilder myTypeBuilder = myModBuilder.DefineType(className, TypeAttributes.Public); //创建类型。 Type retval = myTypeBuilder.CreateType(); //保存程序集,以便可以被Ildasm.exe解析,或被测试程序引用。 //myAsmBuilder.Save(myAsmName.Name + ".dll"); return retval; } /**//// <summary> /// 添加属性到类型的实例,注意:该操作会将其它成员清除掉,其功能有待完善。 /// </summary> /// <param name="classType">指定类型的实例。</param> /// <param name="lcpi">表示属性的一个列表。</param> /// <returns>返回处理过的类型的实例。</returns> public static Type AddProperty(Type classType, List<CustPropertyInfo> lcpi) { //合并先前的属性,以便一起在下一步进行处理。 MergeProperty(classType, lcpi); //把属性加入到Type。 return AddPropertyToType(classType, lcpi); } /**//// <summary> /// 添加属性到类型的实例,注意:该操作会将其它成员清除掉,其功能有待完善。 /// </summary> /// <param name="classType">指定类型的实例。</param> /// <param name="cpi">表示一个属性。</param> /// <returns>返回处理过的类型的实例。</returns> public static Type AddProperty(Type classType, CustPropertyInfo cpi) { List<CustPropertyInfo> lcpi = new List<CustPropertyInfo>(); lcpi.Add(cpi); //合并先前的属性,以便一起在下一步进行处理。 MergeProperty(classType, lcpi); //把属性加入到Type。 return AddPropertyToType(classType, lcpi); } /**//// <summary> /// 从类型的实例中移除属性,注意:该操作会将其它成员清除掉,其功能有待完善。 /// </summary> /// <param name="classType">指定类型的实例。</param> /// <param name="propertyName">要移除的属性。</param> /// <returns>返回处理过的类型的实例。</returns> public static Type DeleteProperty(Type classType, string propertyName) { List<string> ls = new List<string>(); ls.Add(propertyName); //合并先前的属性,以便一起在下一步进行处理。 List<CustPropertyInfo> lcpi = SeparateProperty(classType, ls); //把属性加入到Type。 return AddPropertyToType(classType, lcpi); } /**//// <summary> /// 从类型的实例中移除属性,注意:该操作会将其它成员清除掉,其功能有待完善。 /// </summary> /// <param name="classType">指定类型的实例。</param> /// <param name="ls">要移除的属性列表。</param> /// <returns>返回处理过的类型的实例。</returns> public static Type DeleteProperty(Type classType, List<string> ls) { //合并先前的属性,以便一起在下一步进行处理。 List<CustPropertyInfo> lcpi = SeparateProperty(classType, ls); //把属性加入到Type。 return AddPropertyToType(classType, lcpi); } #endregion #region 私有方法 /**//// <summary> /// 把类型的实例t和lcpi参数里的属性进行合并。 /// </summary> /// <param name="t">实例t</param> /// <param name="lcpi">里面包含属性列表的信息。</param> private static void MergeProperty(Type t, List<CustPropertyInfo> lcpi) { foreach (PropertyInfo pi in t.GetProperties()) { CustPropertyInfo cpi = new CustPropertyInfo(pi.PropertyType.FullName, pi.Name); lcpi.Add(cpi); } } /**//// <summary> /// 从类型的实例t的属性移除属性列表lcpi,返回的新属性列表在lcpi中。 /// </summary> /// <param name="t">类型的实例t。</param> /// <param name="ls">要移除的属性列表。</param> private static List<CustPropertyInfo> SeparateProperty(Type t, List<string> ls) { List<CustPropertyInfo> ret = new List<CustPropertyInfo>(); foreach (PropertyInfo pi in t.GetProperties()) { foreach (string s in ls) { if (pi.Name != s) { CustPropertyInfo cpi = new CustPropertyInfo(pi.PropertyType.FullName, pi.Name); ret.Add(cpi); } } } return ret; } /**//// <summary> /// 把lcpi参数里的属性加入到myTypeBuilder中。注意:该操作会将其它成员清除掉,其功能有待完善。 /// </summary> /// <param name="myTypeBuilder">类型构造器的实例。</param> /// <param name="lcpi">里面包含属性列表的信息。</param> private static void AddPropertyToTypeBuilder(TypeBuilder myTypeBuilder, List<CustPropertyInfo> lcpi) { PropertyBuilder custNamePropBldr; MethodBuilder custNameGetPropMthdBldr; MethodBuilder custNameSetPropMthdBldr; MethodAttributes getSetAttr; ILGenerator custNameGetIL; ILGenerator custNameSetIL; // 属性Set和Get方法要一个专门的属性。这里设置为Public。 getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig; // 添加属性到myTypeBuilder。 foreach (CustPropertyInfo cpi in lcpi) { //定义字段。 FieldBuilder customerNameBldr = myTypeBuilder.DefineField(cpi.FieldName, Type.GetType(cpi.Type), FieldAttributes.Private); customerNameBldr.SetConstant("11111111"); //定义属性。 //最后一个参数为null,因为属性没有参数。 custNamePropBldr = myTypeBuilder.DefineProperty(cpi.PropertyName, PropertyAttributes.HasDefault, Type.GetType(cpi.Type), null); custNamePropBldr.SetConstant("111111111"); //定义Get方法。 custNameGetPropMthdBldr = myTypeBuilder.DefineMethod(cpi.GetPropertyMethodName, getSetAttr, Type.GetType(cpi.Type), Type.EmptyTypes); custNameGetIL = custNameGetPropMthdBldr.GetILGenerator(); try { custNameGetIL.Emit(OpCodes.Ldarg_0); //custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr); custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr); custNameGetIL.Emit(OpCodes.Ret); } catch (Exception ex) { } //定义Set方法。 custNameSetPropMthdBldr = myTypeBuilder.DefineMethod(cpi.SetPropertyMethodName, getSetAttr, null, new Type[] { Type.GetType(cpi.Type) }); custNameSetIL = custNameSetPropMthdBldr.GetILGenerator(); custNameSetIL.Emit(OpCodes.Ldarg_0); custNameSetIL.Emit(OpCodes.Ldarg_1); custNameSetIL.Emit(OpCodes.Stfld, customerNameBldr); custNameSetIL.Emit(OpCodes.Ret); //custNamePropBldr.SetConstant("ceshi"); //把创建的两个方法(Get,Set)加入到PropertyBuilder中。 custNamePropBldr.SetGetMethod(custNameGetPropMthdBldr); custNamePropBldr.SetSetMethod(custNameSetPropMthdBldr); } } /**//// <summary> /// 把属性加入到类型的实例。 /// </summary> /// <param name="classType">类型的实例。</param> /// <param name="lcpi">要加入的属性列表。</param> /// <returns>返回处理过的类型的实例。</returns> public static Type AddPropertyToType(Type classType, List<CustPropertyInfo> lcpi) { AppDomain myDomain = Thread.GetDomain(); AssemblyName myAsmName = new AssemblyName(); myAsmName.Name = "MyDynamicAssembly"; //创建一个永久程序集,设置为AssemblyBuilderAccess.RunAndSave。 AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave); //创建一个永久单模程序块。 ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name + ".dll"); //创建TypeBuilder。 TypeBuilder myTypeBuilder = myModBuilder.DefineType(classType.FullName, TypeAttributes.Public); //把lcpi中定义的属性加入到TypeBuilder。将清空其它的成员。其功能有待扩展,使其不影响其它成员。 AddPropertyToTypeBuilder(myTypeBuilder, lcpi); //创建类型。 Type retval = myTypeBuilder.CreateType(); //保存程序集,以便可以被Ildasm.exe解析,或被测试程序引用。 //myAsmBuilder.Save(myAsmName.Name + ".dll"); return retval; } #endregion #region 辅助类 /**//// <summary> /// 自定义的属性信息类型。 /// </summary> public class CustPropertyInfo { private string propertyName; private string type; /**//// <summary> /// 空构造。 /// </summary> public CustPropertyInfo() { } /**//// <summary> /// 根据属性类型名称,属性名称构造实例。 /// </summary> /// <param name="type">属性类型名称。</param> /// <param name="propertyName">属性名称。</param> public CustPropertyInfo(string type, string propertyName) { this.type = type; this.propertyName = propertyName; } /**//// <summary> /// 获取或设置属性类型名称。 /// </summary> public string Type { get { return type; } set { type = value; } } /**//// <summary> /// 获取或设置属性名称。 /// </summary> public string PropertyName { get { return propertyName; } set { propertyName = value; } } /**//// <summary> /// 获取属性字段名称。 /// </summary> public string FieldName { get { if (propertyName.Length < 1) return ""; return propertyName.Substring(0, 1).ToLower() + propertyName.Substring(1); } } /**//// <summary> /// 获取属性在IL中的Set方法名。 /// </summary> public string SetPropertyMethodName { get { return "set_" + PropertyName; } } /**//// <summary> /// 获取属性在IL中的Get方法名。 /// </summary> public string GetPropertyMethodName { get { return "get_" + PropertyName; } } } #endregion } }

C#

如何在服务器上读取一个服务器上的txt文件

22. 十月 2013
其实很容易的只要定义了相对路径使用File.ReadAllLines这样的方法即可            string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "a.txt"); if (!File.Exists(filePath)) { value = ""; } else { string[] lines = File.ReadAllLines(filePath, Encoding.GetEncoding("utf-8")); if (lines.Length < 3) { value = ""; } else { } }

C#

MongoDB C# Driver 如何查询后更新

21. 十月 2013
MongoDB C# Driver 如何查询后更新表 public static bool aaa(string bbb, bool ccc,string message) { bool state = false; try { using (var mc = new MongoDBProvider("ddd", "eee")) { QueryDocument query = new QueryDocument(); UpdateDocument update = new UpdateDocument(); query.Add("param1", bbb); QueryDocument doc = new QueryDocument(); doc.Add("param2", ccc); doc.Add("Message", message); update.Add("$set", doc); var result = mc.Collection.Update(query, update); state = true; } } catch { state = false; } return state; }

.NET, C#

C#读取AppSetting

21. 十月 2013
using System.Configuration; ConfigurationManager.AppSettings["WorkVersion"];

.NET, C#

C#构建一个获取Get参数的静态方法

21. 十月 2013
  调用效果: string type = RequestUtils.GetQueryString("type");   做法首先在RequestUtils.cs里新建一个静态方法: public static string GetQueryString(string strName) { return StringUtils.GetQueryString(strName, string.Empty); }   然后在StringUtils里面新建一个真正获取参数的方法: public static string GetQueryString(string strName, string defValue) { if (HttpContext.Current.Request.QueryString[strName] == null) { return defValue; } return HttpContext.Current.Request.QueryString[strName].Trim(); }     如此便可接收Get类型请求的参数了  

.NET, C#

c# linq如何进行降序以及按优先级排序

25. 九月 2013
list = list.OrderByDescending(p => p.Nav.Annual7D).OrderBy(p => p.Priority).ToList();

C#

如何截断stringbuilder的最后一个字符

7. 九月 2013
如何截断stringbuilder的最后一个字符 sb.ToString().TrimEnd(',')

C#

c#计算N个工作日后的日期

3. 七月 2013
参考:http://zhidao.baidu.com/question/547703753.html 比如我初始化一个日期,比如2013/5/6,根据进度流程,我下一步应该是在工作日8天内完成,要怎么样根据这个时间,减去节假日,得到八个工作日之后的时间应该是多少呢?例如2013/5/6,八个工作日。及减去星期六日,应该就是到2013/5/15.请问应该要怎么样实现呢 private void button1_Click(object sender, EventArgs e) {     DateTime dt = new DateTime(2013, 5, 6);    MessageBox .Show (Result (DateTime.Now ,8).ToString ()); } private DateTime Result(DateTime dt,int n) {     DateTime temp = dt;     while (n-- > 0 )     {         temp = temp.AddDays(1);         while(temp.DayOfWeek == System.DayOfWeek.Saturday || temp.DayOfWeek == System.DayOfWeek.Sunday)             temp = temp.AddDays(1);     }     return temp; }

C#

【.Net】解决CouchBase With MemCached 自定义对象store总是返回false

4. 六月 2013
参考:http://cplus.about.com/od/thebusinessofsoftware/a/Csharp-Tutorial-two-On-using-couchbase.htm 在定义的class上面加上序列化的标示 That's about enough to get you started. You can store an instance of a class by marking it as Serializable. [Serializable] 这样就可以把一个list<yourObject>存储到couchbase中了。

.NET, C#

C#使用动态类型(新建一个带动态参数的方法)

3. 六月 2013
方法:  public bool Finish<T>(string guidKey,T dealDetail) { return true; } 调用: aaa.Finish<resultInfo>(_key, result);   方法示例: public static void CfSet<T>(string key, T dynamicObj, DateTime dt) { mc.Cas(StoreMode.Set, key, dynamicObj, dt, 0); } public static T CfGet<T>(string key, T dynamicObj) { return mc.Get(key) is T ? (T) mc.Get(key) : default(T); }  

C#

.Net C#向下取整的方法

31. 五月 2013
.Net C#向下取整的方法 public static string getFormatString(decimal d) {             return (Math.Floor(d * 100) / 100).ToString("0.00");         }

.NET, C#

如何在C# case判断中增加or的逻辑

29. 五月 2013
转自:http://stackoverflow.com/questions/848472/how-add-or-in-case-statements 举例想要实现以下效果: switch(myvar){ case:2 or 5: ... break; case:7 or 12: ... break; ... } 正解可以这么写: switch(myvar){ case2: case5: ... break; case7: case12: ... break; ... }

.NET, C#

c#定义时间(DateTime)

29. 五月 2013
DateTime date = DateTime.Parse("1900-01-01");

.NET, C#

.Net移位运算符详解实例——左移位运算符>>、带符号的右移位运算符>>

20. 五月 2013
转自:http://blog.csdn.net/vebasan/article/details/6193932 移位运算符也针对二进制的“位”,它主要包括:左移位运算符(<<)、右移位运算符(>>>)、带符号的右移位运算符(>>)。   1.左移运算符左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n 位,就相当于乘上2 的n 次方,例如下面的例子。public class data17{public static void main(String[] args){int a=2;int b=2;System.out.println("a 移位的结果是:"+(a<<b));}}运行结果a 移位的结果是:8分析上面的程序段:首先从本质上来分析,2 的二进制是00000010,它向左移动2 位,就变成了00001000,即8。如果从另一个角度来分析,它向左移动2 位,其实就是乘上2 的2 次方,结果还是8。   2.右移运算符右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n 位,就相当于除上2 的n 次方。public class data18{public static void main(String[] args){int a=16;int b=2;System.out.println("a 移位的结果是:"+(a>>>b));}}运行结果a 移位的结果是:4分析上面的程序段:从本质上来分析,16 的二进制是00010000,它向右移动2 位,就变成了00000100,即4。如果从另一个角度来分析,它向右移动2 位,其实就是除以2 的2 次方,结果还是4。   3.带符号的右移运算符带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1,先看下面一个简单的例子。public class data19{public static void main(String[] args){int a=16;int c=-16;int b=2;int d=2;System.out.println("a 的移位结果:"+(a>>b));System.out.println("c 的移位结果:"+(c>>d));}}运行结果a 的移位结果:4c 的移位结果:-4分析上面的程序段:a 的值是16,转换成二进制是00010000,让它右移两位成00000100 即4。c 的值是-16,转换成二进制是11101111,让它右移一位成11111011 即-4。

.NET, C#

C# ToString()各种格式对照表

20. 五月 2013
参考:http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx 中文参考:http://msdn.microsoft.com/zh-cn/library/dwhawy9k.aspx#中国(简体中文) Format specifier Name Description Examples "C" or "c" Currency Result: A currency value. Supported by: All numeric types. Precision specifier: Number of decimal digits. Default precision specifier: Defined bySystem.Globalization.NumberFormatInfo. More information: The Currency ("C") Format Specifier. 123.456 ("C", en-US) -> $123.46 123.456 ("C", fr-FR) -> 123,46 € 123.456 ("C", ja-JP) -> ¥123 -123.456 ("C3", en-US) -> ($123.456) -123.456 ("C3", fr-FR) -> -123,456 € -123.456 ("C3", ja-JP) -> -¥123.456 "D" or "d" Decimal Result: Integer digits with optional negative sign. Supported by: Integral types only. Precision specifier: Minimum number of digits. Default precision specifier: Minimum number of digits required. More information: The Decimal("D") Format Specifier. 1234 ("D") -> 1234 -1234 ("D6") -> -001234 "E" or "e" Exponential (scientific) Result: Exponential notation. Supported by: All numeric types. Precision specifier: Number of decimal digits. Default precision specifier: 6. More information: The Exponential ("E") Format Specifier. 1052.0329112756 ("E", en-US) -> 1.052033E+003 1052.0329112756 ("e", fr-FR) -> 1,052033e+003 -1052.0329112756 ("e2", en-US) -> -1.05e+003 -1052.0329112756 ("E2", fr_FR) -> -1,05E+003 "F" or "f" Fixed-point Result: Integral and decimal digits with optional negative sign. Supported by: All numeric types. Precision specifier: Number of decimal digits. Default precision specifier: Defined bySystem.Globalization.NumberFormatInfo. More information: The Fixed-Point ("F") Format Specifier. 1234.567 ("F", en-US) -> 1234.57 1234.567 ("F", de-DE) -> 1234,57 1234 ("F1", en-US) -> 1234.0 1234 ("F1", de-DE) -> 1234,0 -1234.56 ("F4", en-US) -> -1234.5600 -1234.56 ("F4", de-DE) -> -1234,5600 "G" or "g" General Result: The most compact of either fixed-point or scientific notation. Supported by: All numeric types. Precision specifier: Number of significant digits. Default precision specifier: Depends on numeric type. More information: The General ("G") Format Specifier. -123.456 ("G", en-US) -> -123.456 123.456 ("G", sv-SE) -> -123,456 123.4546 ("G4", en-US) -> 123.5 123.4546 ("G4", sv-SE) -> 123,5 -1.234567890e-25 ("G", en-US) -> -1.23456789E-25 -1.234567890e-25 ("G", sv-SE) -> -1,23456789E-25 "N" or "n" Number Result: Integral and decimal digits, group separators, and a decimal separator with optional negative sign. Supported by: All numeric types. Precision specifier: Desired number of decimal places. Default precision specifier: Defined bySystem.Globalization.NumberFormatInfo. More information: The Numeric ("N") Format Specifier. 1234.567 ("N", en-US) -> 1,234.57 1234.567 ("N", ru-RU) -> 1 234,57 1234 ("N1", en-US) -> 1,234.0 1234 ("N1", ru-RU) -> 1 234,0 -1234.56 ("N3", en-US) -> -1,234.560 -1234.56 ("N3", ru-RU) -> -1 234,560 "P" or "p" Percent Result: Number multiplied by 100 and displayed with a percent symbol. Supported by: All numeric types. Precision specifier: Desired number of decimal places. Default precision specifier: Defined bySystem.Globalization.NumberFormatInfo. More information: The Percent ("P") Format Specifier. 1 ("P", en-US) -> 100.00 % 1 ("P", fr-FR) -> 100,00 % -0.39678 ("P1", en-US) -> -39.7 % -0.39678 ("P1", fr-FR) -> -39,7 % "R" or "r" Round-trip Result: A string that can round-trip to an identical number. Supported by: Single, Double, and BigInteger. Precision specifier: Ignored. More information: The Round-trip ("R") Format Specifier. 123456789.12345678 ("R") -> 123456789.12345678 -1234567890.12345678 ("R") -> -1234567890.1234567 "X" or "x" Hexadecimal Result: A hexadecimal string. Supported by: Integral types only. Precision specifier: Number of digits in the result string. More information: The HexaDecimal ("X") Format Specifier. 255 ("X") -> FF -1 ("x") -> ff 255 ("x4") -> 00ff -1 ("X4") -> 00FF Any other single character Unknown specifier Result: Throws a FormatException at run time.  

.NET, C#

lock语句的递归问题

18. 一月 2013
前几天在网上闲逛,无意中看到有这么一道题及其答案,如下:   根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。 publicvoid test(int i) { lock(this) { if (i > 10) { i--; test(i); } } }   答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)   当我看到这道题时,我心里只有两个答案,1、会发生死锁,2、不会。^_^说了当没说。我觉得会发生死锁的理由是:同一线程只能进入lock语句一次,如果这个线程没有退出lock语句就不能再次进入lock语句。而不会发生死锁的理由是,同一线程可以多次进入到lock语句中。   我将这段代码拷入VS中运行,发现没有进入死锁,于是想找个权威的理由来解释它,终于在《CLR via C#》第二版(中文版,清华大学出版社出版)的第530页中第7行找到了这样的描述:“同样需要引起注意的是线程可以递归拥有同步块”。即同一线程可以递归调用lock语句。

.NET, C#

.Net 工厂模式(Factory Pattern)

9. 一月 2013
定义: 定义一个创建对象的接口,但是让子类来决定哪个类将被实例化。工厂方法让一个类实例化推迟到子类。   工厂方法模式           先来看下它的组成吧:                       抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。                       具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。                       抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。                       具体产品角色:具体工厂角色所创建的对象就是此角色的实例。public abstract class car       //抽象产品       {           public abstract void     Drive();       }       public class bens : car //具体产品1       {           public override void Drive()           {               throw new Exception("The method or operation is not implemented.");           }           }       public class bmw : car     //具体产品2       {           public override void Drive()           {               throw new Exception("The method or operation is not implemented.");           }       }       public abstract class driver     //抽象工厂       {         public abstract     car divercar();          }       public class benzdriver : driver //具体工厂1       {           public override car divercar()           {               return new bens();           }           }       public class bmwdriver : driver //具体工厂2       {           public override car divercar()           {               return new bmw();           }       }       public class test        {           public static void main()           {               driver dri = new benzdriver();               car ca = dri.divercar();               ca.Drive();                           }

.NET, C#

递归算法与优化后的算法对比(斐波那契数列)

9. 一月 2013
原文:http://developer.51cto.com/art/201202/319279.htm 前段时间看了《【面试】——反应迟钝的递归》中的三个递归算法,斐波那契数列优化后的算法思路确实不错,但是后面2个数列用递归的话,个人感觉有点得不偿失。能不用递归的话,尽量不用,因为有些算法完全可以用数学来解决。因此,本文中将这三个数列的最终算法总结如下。 1、计算数组1,1,2,3,5,8,13...第30位的值 递归算法如下: public static int CalculateFibonacciSequence(int index)           {               if (index <= 0)               {                   return 0;               }                 if (index == 1 || index == 2)               {                   return 1;               }                 return CalculateFibonacciSequence(index - 1) + CalculateFibonacciSequence(index - 2);           }  用递归算法来计算的话,有很多重复性的操作,采用数组相对来说,效率更高,最终算法如下: public static int CalculateFibonacciSequence(int index)           {               if (index <= 0)               {                   return 0;               }                 if (index == 1 || index == 2)               {                   return 1;               }                 int[] fibonacciArray = new int[index];               fibonacciArray[0] = 1;               fibonacciArray[1] = 1;                 for (int innerIndex = 2; innerIndex < fibonacciArray.Length; innerIndex++)               {                   fibonacciArray[innerIndex] = fibonacciArray[innerIndex - 1] + fibonacciArray[innerIndex - 2];               }                 return fibonacciArray[index - 1];           }  对于斐波那契数列,通用公式为Fn=F(n-1)+F(n-2)(n>=2,n∈N*),直接循环计算一次就可以获得所需的值。 2、计算1+2+3+4+...+n的值 递归算法如下: public static int CalculateNumberSequenceCount(int index)           {               if (index <= 0)               {                   return 0;               }                 return CalculateNumberSequenceCount(index - 1) + index;           }  当数字(index)很大时,用上面的递归算法肯定是有问题的,我们看下最终的算法,如下所示: public static int CalculateNumberSequenceCount(int index)           {               if (index <= 0)               {                   return 0;               }                 return index * (index + 1) / 2;           }  对于1+2+3+4+...+n,完全是高中数学的等差数列求和的一个特例。1+2+3+4+......+n等于(首项+末项)*项数/2,所以结果为n(n+1)/2 。这个完全可以不用递归来进行计算,公式套用一下就解决了。 3、计算1-2+3-4+5-6+7+...+n的值 递归算法如下: public static int CalculateNumberSequence(int index)           {               if (index <= 0)               {                   return 0;               }                 return index % 2 == 0 ? CalculateNumberSequence(index - 1) - index : CalculateNumberSequence(index - 1) + index;           }  对于1-2+3-4+5-6+7+...+n,可以分为2种情况,分别为: (1)当n是偶数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-1)-n] =-1×(n/2) =-n/2 (2)当n是奇数时,1-2+3-4+5-6+7+...+n=(1-2)+(3-4)+(5-6)+……+[(n-2)-(n-1)]+n =-1×(n-1)/2 +n =(n+1)/2 因此,最终的算法如下: public static int CalculateCrossNumberSequence(int index)           {               if (index <= 0)               {                   return 0;               }                 return index % 2 == 0 ? -index / 2 : (index + 1) / 2;           }  能够用数学解决的问题,尽量不要用递归来进行计算。当然,很多情况还是需要用递归的。这里并不是说递归算法不好,只能说具体问题采用最优方式来解决才是最终的方案,希望对各位有所帮助。 原文:http://www.cnblogs.com/jasenkin/archive/2012/02/22/recursion_math_algorithm_comparion.html

.NET, C#

.NET(C#)]写出程序的输出结果

9. 一月 2013
原文:http://zhidao.baidu.com/question/331778758.html public abstract class A{public A(){Console.WriteLine( 'A' );}public virtual void Fun(){Console.WriteLine( "A.Fun()" );}}public class B : A{public B(){Console.WriteLine( 'B' );}public new void Fun(){Console.WriteLine( "B.Fun()" );}public static void Main(){ A a = new B(); a.Fun();}}答案:A BA.Fun()我想知道答案的具体过程是怎样的?为什么会先输出A后输出B 最后输出A.Fun() 在类实例化时,程序会自动执行类的默认构造函数,因为B继承A,所以先执行类A的默认构造函数,然后是B。用父类实例化子类(A a=new B()),对于(a.Fun)来说,是调用的父类中的Fun函数,如果用(B a=new B()),a.Fun就会调用类B中的Fun函数,输出结果会是B.Fun。希望对你有帮助。

.NET, C#

关于新浪微博api返回的时间字符串的处理

7. 一月 2013
非常奇怪lz的格式是 Fri Oct 12 10:26:03 0800 2012   没办法非常格式用非常手法 自己处理 处理后返回 2012-10-10 10:10:10这样的格式 string value="Fri Oct 12 10:26:03 +0800 2012"; IFormatProvider culture = new CultureInfo("en-US", true); string[] sArray = value.Split(' '); sArray[5] = "+" + sArray[5]; string sArrayString = sArray[0] + " " + sArray[1] + " " + sArray[2] + " " + sArray[3] + " " + sArray[5] + " " + sArray[6]; DateTime dt = DateTime.ParseExact(sArrayString, "ddd MMM dd HH:mm:ss zzz yyyy", culture); time = dt.ToString("yyyy-MM-dd HH:mm:ss");

.NET, C#

.Net發出Http post请求

30. 十一月 2012
    //.Net發出Http post请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send"); request.Method = "POST"; request.ContentType = "application/json;charset=utf-8;"; request.Headers.Add(string.Format("Authorization: key={0}", "123456")); string RegistrationID = deviceId; //row["RegistrationID"].ToString(); var postData = new { data = new { message = message, //message這個tag要讓前端開發人員知道 msgcnt = "brand-20120616102338435" }, registration_ids = new string[] { RegistrationID }, message = message }; string p = JsonConvert.SerializeObject(postData);//將Linq to json轉為字串 byte[] byteArray = Encoding.UTF8.GetBytes(p);//要發送的字串轉為byte[] request.ContentLength = byteArray.Length; Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //發出Request WebResponse response = request.GetResponse(); Stream responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); string responseStr = reader.ReadToEnd(); reader.Close(); responseStream.Close(); response.Close();  

.NET, C#