C#将String类型转换成任意基本类型.docx

上传人:b****7 文档编号:15491633 上传时间:2023-07-05 格式:DOCX 页数:7 大小:16.46KB
下载 相关 举报
C#将String类型转换成任意基本类型.docx_第1页
第1页 / 共7页
C#将String类型转换成任意基本类型.docx_第2页
第2页 / 共7页
C#将String类型转换成任意基本类型.docx_第3页
第3页 / 共7页
C#将String类型转换成任意基本类型.docx_第4页
第4页 / 共7页
C#将String类型转换成任意基本类型.docx_第5页
第5页 / 共7页
C#将String类型转换成任意基本类型.docx_第6页
第6页 / 共7页
C#将String类型转换成任意基本类型.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C#将String类型转换成任意基本类型.docx

《C#将String类型转换成任意基本类型.docx》由会员分享,可在线阅读,更多相关《C#将String类型转换成任意基本类型.docx(7页珍藏版)》请在冰点文库上搜索。

C#将String类型转换成任意基本类型.docx

C#将String类型转换成任意基本类型

C#将String类型转换成任意基本类型

  前几天,在写一个自动从XML中读取数值并注入到对象属性中去的时候,为了方便,不想把原来是int类型的写与string类型,但是从XML里读取出来的时候,都是string类型。

这时就需要将string类型自动地根据对象属性的类型转换过来。

  比如string==>int/long/double/DateTime/enum/String/bool....

  刚开始的时候,确实有点犯傻,来个长长的switch。

  但是突然间想到,在使用mvc的时候,它们不是也把从表单或URL中传上来的值自动转换成对应的类型了吗?

  hoho~~~

  眼前一亮,就这么整,看看人家怎么做到的。

  使用反编译软件Reflector打开System.Web.Mvc(直接在VS2008下右键选择Reflector打开就行了,默认位置在C:

\ProgramFiles\MicrosoftASP.NET\ASP.NETMVC1.0\Assemblies\System.Web.Mvc.dll)

  顺着mvc的访问路径,一路到了下来。

发现原来还有一个这么简单的方法,这里直接把我简单的DEMO列出来,相信大家都很容易看明白了:

  usingSystem;

  usingSystem.ComponentModel;

  namespaceYcoeXu.Common

  {

  publicstaticclassStringExtensions

  {

  ///

  ///将字符串格式化成指定的数据类型

  ///

  ///

  ///

  ///

  publicstaticObjectFormat(thisStringstr,Typetype)

  {

  if(String.IsNullOrEmpty(str))

  returnnull;

  if(type==null)

  returnstr;

  if(type.IsArray)

  {

  TypeelementType=type.GetElementType();

  String[]strs=str.Split(newchar[]{';'});

  Arrayarray=Array.CreateInstance(elementType,strs.Length);

  for(inti=0,c=strs.Length;i

  {

  array.SetValue(ConvertSimpleType(strs[i],elementType),i);

  }

  returnarray;

  }

  returnConvertSimpleType(str,type);

  }

  privatestaticobjectConvertSimpleType(objectvalue,TypedestinationType)

  {

  objectreturnValue;

  if((value==null)||destinationType.IsInstanceOfType(value))

  {

  returnvalue;

  }

欢迎进入.NET社区论坛,与200万技术人员互动交流>>进入

  stringstr=valueasstring;

  if((str!

=null)&&(str.Length==0))

  {

  returnnull;

  }

  TypeConverterconverter=TypeDescriptor.GetConverter(destinationType);

  boolflag=converter.CanConvertFrom(value.GetType());

  if(!

flag)

  {

  converter=TypeDescriptor.GetConverter(value.GetType());

  }

  if(!

flag&&!

converter.CanConvertTo(destinationType))

  {

  thrownewInvalidOperationException("无法转换成类型:

"+value.ToString()+"==>"+destinationType);

  }

  try

  {

  returnValue=flag?

converter.ConvertFrom(null,null,value):

converter.ConvertTo(null,null,value,destinationType);

  }

  catch(Exceptione)

  {

  thrownewInvalidOperationException("类型转换出错:

"+value.ToString()+"==>"+destinationType,e);

  }

  returnreturnValue;

  }

  }

  }

  DEMO:

  在配置文件里自定义配置:

  1.在节点内添加节点:

  

  2.写配置看起来会是这样的:

  

  //..其它代码

  

  

  

  

  

  

  

写个类自动加载

  usingSystem;

  usingSystem.Reflection;

  usingSystem.Collections.Specialized;

  usingSystem.Configuration;

  usingYcoeXu.Common;

  namespaceYcoeXu.Test

  {

  publicclassXuConfig

  {

  privateXuConfig(){}

  privatestaticXuConfigconfig=null;

  privatestaticXuConfigInstance

  {

  get

  {

  if(config==null)

  {

  config=newXuConfig();

  Typetype=typeof(XuConfig);

  //从配置文件里读取XuConfig节点

  NameValueCollectionxuConfig=(NameValueCollection)ConfigurationManager.GetSection("XuConfig");

  //根据Key匹配对应的属性

  foreach(StringkeyinxuConfig.AllKeys)

  {

  PropertyInfopi=type.GetProperty(key);

  if(pi==null||String.IsNullOrEmpty(xuConfig[key]))

  continue;

  //自动转换类型并注入值

  pi.SetValue(config,xuConfig[key].Format(pi.PropertyType),null);

  }

  }

  returnconfig;

  }

  }

  publicintID{set;get;}

  publicStringName{set;get;}

  publicRole[]Roles{set;get;}

  publicvoidTest()

  {

  Console.WriteLine(XuConfig.Instance.Name);

  Console.WriteLine(XuConfig.Instance.ID);

  foreach(RolerinXuConfig.Instance.Roles)

  {

  Console.WriteLine(r.ToString());

  }

  }

  }

  publicenumRole

  {

  Guest,

  Member,

  Manager,

  Admin

  }

  }

  注意了,一定要添加一个引用:

System.Configuration

  这里对String进行了一些扩展,使它可以直接当成String对象的方法访问了,是不是很方便呢。

hoho~~~

  项目中的一点点心得,发现网上还没有人放出这种方法,这里就写出来给大家分享下,相信对大家以后进行类似的自动转换或赋值的功能实现会有很大的帮助

  好啦,公司貌似又要转向PHP了,上年刚从java转到C#,明年又要转向其它语言了,hoho~~~

  引用网友的一句话,做人要像柯南这么有霸气,走到哪里,人就死到哪里

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2