c# 将object 转换成真实类型
//这里如何将 obj转换成实际类型
}
public static void main(){
object a=new A();
f1(a);
object b=new B();
f1(b);
} 展开
///<summary>
///将object对象转换为实体对象
///</summary>
///<typeparamname="T">实体对象类名</typeparam>
///<paramname="asObject">object对象</param>
///<returns></returns>
privateTConvertObject<T>(objectasObject)whereT:new()
{
//创建实体对象实例
vart=Activator.CreateInstance<T>();
if(asObject!=null)
{
Typetype=asObject.GetType();
//遍历实体对象属性
foreach(varinfointypeof(T).GetProperties())
{
objectobj=null;
//取得object对象中此属性的值
varval=type.GetProperty(info.Name)?.GetValue(asObject);
if(val!=null)
{
//非泛型
if(!info.PropertyType.IsGenericType)
obj=Convert.ChangeType(val,info.PropertyType);
else//泛型Nullable<>
{
TypegenericTypeDefinition=info.PropertyType.GetGenericTypeDefinition();
if(genericTypeDefinition==typeof(Nullable<>))
{
obj=Convert.ChangeType(val,Nullable.GetUnderlyingType(info.PropertyType));
}
else
{
obj=Convert.ChangeType(val,info.PropertyType);
}
}
info.SetValue(t,obj,null);
}
}
}
returnt;
}
#endregion
扩展资料
C#反射遍历对象所有属性
[TestMethod]
publicvoidTest6()
{
List<RepaymentRecord>repaymentList=newList<RepaymentRecord>();
StringBuildermsg=newStringBuilder();
RepaymentRecordentity=newRepaymentRecord();
entity.Month1="100";
entity.Month18="900";
entity.Month24="322";
foreach(PropertyInfopinentity.GetType().GetProperties())
{
msg.AppendFormat("{0},{1}",p.Name,p.GetValue(entity));
}
varresult=msg;
Assert.IsNotNull(result);
}
1.强转,用于你知道目标是什么类别,只是传递参数的时候,由于某些原因变成了object而已
Abc a = (Abc)value;
2.AS,这个只能用于可引用类型,就是class类型,如果是struct是不允许的,因为struct不能设置为null,这个方式的效果就是,如果能转成指定类型,就会转换成功,反之得到的是null
Abc a = value as Abc;
实际这个语法的内部作法是:
if (value is Abc){
return (Abc)value;
}else{
return null;
}
3.一些系统基础类型可以用Convert进行操作,另外还可以用Convert.ChangeType(value,type);
其中type是你的目标类型,如:Convert.ChangeType(value,typeof(Abc));
这里用到的 typeof 是为了得到 目标的Type
QQ:254186917
群1:14895358
群2:112481823
{
A a=obj as A;
if(a!=null)
{
//do sth.
}
//others
}
不过最好不要这样做,用抽象类,逻辑清晰,不要这样一个个判断和转换,性能也有明显提升。
转换成int: Convert.ToINT32(aaa);
转换成string:aaa.ToString();
转换成日期时间:Convert.ToDateTime(xxx);
转换成double:Convert.ToDouble(xxx);
如果你自定义了一个类,(ˇˍˇ) 想~转换为该对象,若该类名为(linkclass)
转换方式为 a = (linkclass)xxx;
2012-02-01
B bb=b as B或(B)b;