我有一个对象,其中包含字符串中的值和字段中的原点类型。
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
在编译时执行coz,因为类型未知,并且由于相同的明显原因,您将出现编译错误。
在稍微复杂的场景中,如果必须强制转换为a,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
,它将无法编译。您必须通过使用dynamic关键字或通过反射来检索它,如下所示:
var id = val.GetType().GetProperty("Id").GetValue(val);
您可以遍历customType(类)的所有可用属性并检索其值。
通过dynamic
关键字检索它,可以直接执行以下操作:
dynamic val = Convert.ChangeType(s.value, s.type);
int id = val.Id;
编译器不会哭。(是的,但是不会有任何智能感知)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句