动态改变数据类型 (C#)

hiyejpgd 2004-07-14 04:11:55
要求:
  先定义一个object变量,之后根据一些条件得到相关数据类型,并设置对应此类型的数据值,在VB中有一个CType(expression, typename),但C#没有此函数。
  用代码简单描述如下:
   object abc; //先定义了一个变量
   Type ty; //保存取得的数据类型
   ..... //运行一段代码后,ty中得到了数据类型(System.String或System.Int32等)
abc=new ? // 问题:怎样根据ty的类型值改变abc的类型并赋相应值?


...全文
519 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
楼主客气
hiyejpgd 2004-07-14
  • 打赏
  • 举报
回复
结帐
hiyejpgd 2004-07-14
  • 打赏
  • 举报
回复
To:brightheroes(闭关|那一剑的风情)
很感谢你的鼎力相助!
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
Type t = "XXX".GetType();



ConstructorInfo[] c = t.GetConstructors();
foreach(ConstructorInfo i in c)
{
ParameterInfo[] p = i.GetParameters();
foreach(ParameterInfo pp in p)
{
pp.GetType();
}
}

你甚至可以通过这个来获取参数的信息
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
大致是这样
总之,只要你构造一个object[]的参数传进去就可以执行了
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
Type t = 你的类型.GetType();

Type types = new Type[2];
types[0] = Type.GetType("System.String");
type[1] = Type.GetType("System.Int16");

ConstructorInfo i = t.GetConstructor(type[1]);
object[] obj = new object[2];
obj[0] = 1;
obj[1] = 2;
i.Invoke(obj);
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
我明白你的意思了,楼主,在调用构造函数的时候,不需要做类型转化
因为它接受的参数是一个object[]的数组
给你贴一段代码
你参考一下
hiyejpgd 2004-07-14
  • 打赏
  • 举报
回复
To:brightheroes(闭关|那一剑的风情)
你说的一点也不错,都不知道是个string还是个int,如何决定用Convert.ToInt或者是Convert.ToString()?
  也不想用switch一个个列举。
  
  ---动态创建?
  是可以动态创建的(Activator.CreateInstance(...))。
关键问题是怎样根据构造函数传入相应的参数(我能找到所有构造函数的声明,但完成不能动态类型转换)
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
是不是动态的调用一个类的构造函数,构造它的一个实例?
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
我是想利用反射动态完成带参数的构造函数声明。
---动态创建?
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
问题:怎样根据ty的类型值改变abc的类型并赋相应值?
楼上们,楼主都不知道是个string还是个int
如何决定用Convert.ToInt或者是Convert.ToString()?
难道要switch?

请楼主给出详细说明
hiyejpgd 2004-07-14
  • 打赏
  • 举报
回复
To:brightheroes(闭关|那一剑的风情)
我是想利用反射动态完成带参数的构造函数声明。
  每个Class的构造函数都不一样(可能带不同类型的参数,参数个数也可能不同),我想在使用反射实现动态声明(根据检测到的第一个构造函数加入相应类型参数以便声明)。
  不知你是否有更好的法子?
IamBM 2004-07-14
  • 打赏
  • 举报
回复
1、System.Convert.To????()。????是一些类型
2、???.Parse()。???是数据类型,比如int、double
3、(???)para。???是要转成的类型,可以是内部类型或自定义类型。

请注意:类形转换有可能会失败,请将它们放在try...catch块中执行
showlie 2004-07-14
  • 打赏
  • 举报
回复
1.Convert
2.Parse
IamBM 2004-07-14
  • 打赏
  • 举报
回复
1、System.Convert.To????()。????是一些类型
2、???.Parse()。???是数据类型,比如int、double
3、(???)para。???是要转成的类型,可以是内部类型或自定义类型。

请注意:类形转换有可能会失败,请将它们放在try...catch块中执行
brightheroes 2004-07-14
  • 打赏
  • 举报
回复
感觉这个问题比较怪异
楼主能否给出详细说明
lxcc 2004-07-14
  • 打赏
  • 举报
回复
用System.Convert.ToXXX作类型转换
jinwanna 2004-07-14
  • 打赏
  • 举报
回复
我猜的,不对别怪我:)

abc=(object)(new ty());

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧