从C#中的未知类型进行强制转换

马赫迪·艾哈迈迪(Mahdi Ahmadi)

我有一个对象,其中包含字符串中的值和字段中的原点类型。

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

我如何才能通过该类型转换值。

曼尼什·米什拉(Manish Mishra)

基本上,您的情况是要使用存储在变量中的类型来键入强制类型转换。您只能在运行时这样做,如下所示:

    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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C#中强制转换泛型函数类型参数

在C#中强制转换为反射类型

在C#中强制转换为任何类型的泛型

Firestore 无法在 C# 中对数组进行类型转换

匿名类型的C#类型强制转换异常,为什么?

指定的强制转换在C#中无效

在C#中需要强制转换基值类型时

C#中针对引用类型的内存的显式强制转换说明

强制转换为定义的C#类型时发生InvalidCastException

类型的C#通用约束可强制转换

在C ++中为C库强制转换数据类型

ASP.NET MVC C#实体转换为未知属性的未知类型

集合中的类型强制转换

如何防止构造函数在C ++中强制转换参数类型?

在C中强制转换函数指针的返回类型

C#类型转换:存在显式强制转换,但会引发转换错误吗?

如何在目标 c 中强制强制转换和转换数据类型

如何在C中不进行赋值而强制转换指针?

C#将对象强制转换为存储在字符串变量中的另一种类型

C#dll中的C#强制转换异常

如何在C#中创建未知/通用类型的列表?

使用未知类型的Autofac C#中的动态TypeRegistration

将对象强制转换为未知数据类型

将List <Object>强制转换为未知类型

C#强制转换泛型类型(如C ++用户定义的转换)

C#中的泛型类型转换

TypeScript中类型区分强制转换的类型安全转换(例如C ++的dynamic_cast)

将列表别名强制转换为C#中的基础

C#中COM对象的运行时强制转换