从 c# 中的未知类型强制转换
本文关键字:转换 类型 未知 | 更新日期: 2023-09-27 17:56:03
我有一个对象,其中包含字符串中的值和字段中的源类型。
class myclass
{
public string value;
public Type type;
}
myclass s=new myclass();
s.value = "10";
s.type = typeof(int);
Type tt = s.type;
row.Value[ind]= s[0].value as tt; //i have error here
我怎样才能通过该类型转换值。
基本上,
您的方案是您希望使用存储在变量中的类型进行类型转换。您只能在运行时执行此操作,如下所示:
myclass s=new myclass();
s.value = "10";
s.type = typeof(int);
var val = Convert.ChangeType(s.value, s.type);
但是由于转换是在运行时完成的,因此您不能将变量 val 存储在任何整数集合中,即 List<int>
甚至你不能做int another = val
,在编译时,类型还不知道,你会有编译错误,同样的原因同样明显。
在有点复杂的方案中,如果必须类型转换为User-Defined dataType
并且想要访问其不同的属性,则无法按原样执行此操作。让我演示一下对您的代码进行一些修改:
class myclass
{
public object value;
public Type type;
}
你还有另一个:
class myCustomType
{
public int Id { get; set; }
}
现在你做:
myclass s = new myclass();
s.value = new myCustomType() { Id = 5 };
s.type = typeof(myCustomType);
var val = Convert.ChangeType(s.value, s.type);
现在如果你做val.Id
,它将无法编译。您必须使用动态关键字或通过反射来检索它,如下所示:
var id = val.GetType().GetProperty("Id").GetValue(val);
您可以循环访问 customType(类)的所有可用属性并检索其值。
要通过dynamic
关键字检索它,请直接执行以下操作:
dynamic val = Convert.ChangeType(s.value, s.type);
int id = val.Id;
编译器不会哭。(是的,虽然不会有任何智能感)
试试这个:
row.Value[ind] = Convert.ChangeType(s.value, tt);