gpt4 book ai didi

c# - 从 C# 中的未知类型转换

转载 作者:行者123 更新时间:2023-11-30 19:57:17 24 4
gpt4 key购买 nike

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

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;

编译器不会哭。 (是的,虽然不会有任何智能感知)

关于c# - 从 C# 中的未知类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30816818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com