当前位置: 首页 > 编程语言 > C#

在C#.NET中即时转换为Type分享

时间:2023-04-11 01:22:05 C#

C#学习教程:C#.NET中类型的即时转换例如,假设我有一个将字符串值(从TextBox或Dropdownlist)分配给Object.Property的函数。如何将值转换为正确的类型?例如,它可以是整数、字符串或枚举。publicvoidFoo(objectobj,stringpropertyName,objectvalue){//获取属性og对象的类型。输入t=obj.GetType().GetProperty(propName).PropertyType;//现在将属性设置为值。//但它会引发错误,因为有时类型是int并且值是“2”//或者类型是枚举(ea:Gender.Male)并且值是“Male”//假设转换总是有效的(“2"可以转换为int2)obj.GetType().GetProperty(propName).SetValue(obj,value,null);}你需要使用Convert.ChangeType(…)函数(输入很容易成为一个对象……我只是先写了一个字符串版本)://////Setsavalueinanobject,usedtohideallthe///处理这类事情的逻辑,因此可以在一行中优雅地工作。////////////publicstaticvoidSetPropertyValueFromString(thisobjecttarget,stringpropertyName,stringpropertyValue){PropertyInfooProp=target.GetType().GetProperty(propertyName);输入tProp=oProp.PropertyType;//可以为空关系必须被区别对待,因为我们//使用它们的基础属性来设置对象中的值从保留字null设置值,并返回if(propertyValue==null){oProp.SetValue(target,null,null);返回;}//获取底层类型属性而不是可空泛型tProp=newNullableConverter(oProp.PropertyType).UnderlyingType;}//使用转换器获取正确的值oProp.SetValue(target,Convert.ChangeType(propertyValue,tProp),null);您正在寻找一个通用转换器!绝非易事..尝试这种方法:UniversalTypeConverter您可以在NuGet中安装PackageUniversalTypeConverter另外,这里使用泛型吗?如果您至少知道转换的目标类型,这将有助于解决方案这是另一种方法,但我不确定是否支持泛型类型:publicvoidFoo(objectobj,stringpropertyName,objectvalue){//获取属性og对象的类型。类型类型=obj。GetType().GetProperty(propertyName).PropertyType;obj.GetType().GetProperty(propertyName).SetValue(obj,Activator.CreateInstance(type,value),null);}支持泛型类型:publicvoidFoo(objectobj,stringpropertyName,objectvalue){//获取属性og对象的类型。类型type=obj.GetType().GetProperty(propertyName).PropertyType;如果(type.IsGenericType)type=type.GetGenericArguments()[0];obj.GetType().GetProperty(propertyName).SetValue(obj,Activator.CreateInstance(type,value),null);我不确定它是否有效,但试一试:publicstaticTTo(thisIConvertibleobj){return(T)Convert.ChangeType(obj,typeof(T));}publicvoidFoo(objectobj,stringpropertyName,objectvalue){Typet=obj.GetType().GetProperty(propName).PropertyType;obj.GetType().GetProperty(propName).SetValue(obj,value.To(),null);我在C#中使用Convert函数我进行转换的方式是使用反射:Typetype=this.myObject.GetType();如果(type.Name==“MyObjectClass”){varVoucherrequest=(MyObjectClass)Convert.ChangeType(myObject,typeof(MyObjectClass));这一切都假设你知道要转换成什么类型??。您甚至可以切换并拥有您想要反映的尽可能多的流派。以上就是C#学习教程:在C#.NET中即时转换为Type。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: