Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中自动转换变量?_C#_.net_Vb.net - Fatal编程技术网

如何在C#中自动转换变量?

如何在C#中自动转换变量?,c#,.net,vb.net,C#,.net,Vb.net,这里有一个例子 var tobeCasted = 1; object data = null; if (whatIsMyType == typeof(int)) { data = (int)tobeCasted; } else if (whatIsMyType == typeof(float)) { data = (float)tobeCasted; } 但是,上述代码是手动检测每种数据类型的。 我正在寻找一种单线通用解决方案,如下所示: data = (whatIsMyT

这里有一个例子

var tobeCasted = 1;
object data = null;

if (whatIsMyType == typeof(int)) {
    data = (int)tobeCasted;
}
else if (whatIsMyType == typeof(float)) {
    data = (float)tobeCasted;
}
但是,上述代码是手动检测每种数据类型的。 我正在寻找一种单线通用解决方案,如下所示:

 data = (whatIsMyType)tobeCasted;

如果要将结果粘贴到
Object
类型的变量中,只需执行此操作。现在,您可以将其转换为int/float/whatever,然后再转换为Object。去掉中间人

var tobeCasted = 1;
object data = tobeCasted;

在这种情况下,我认为您需要
Convert.ChangeType

object data = Convert.ChangeType(toBeCasted, whatIsMyType);
当然,这只适用于有限的一组类型,但首先也适用于铸造。如果你能告诉我们更多你想做的事情,那会很有帮助的。很可能有更好的方法。

使用这种方法。
Convert
类的文档在这里;它包含许多有用的运行时方法


也就是说,尽可能避免这种情况。这种类型的运行时类型可能被认为是一个糟糕的选择

您的示例太琐碎,无法理解您的实际需要,但可能TypeMapper之类的东西更适合您使用。

您在给定程序集中是否可以选择类型?你可以使用反射来做类似的事情,只要你有搜索类型的空间。当你将对象存储在
数据中时,你会立即[隐式地]将对象转换回
对象,那么你可能从中获得什么呢?这里没有发生任何有成效的事情;您只是拆箱并重新装箱值。您这里的问题不清楚,但可能可以通过使用泛型并将
whatIsMyType
作为泛型参数传递来解决。
Eric Lippert
Jon Skeet
回答了相同的问题!谁赢了?投注是开放的
:D
不同的是,在
float
施法中,他最终会得到一个带框的float,这与一个带框的int不同。@JonSkeet但他只在对象本身是float时施法float,当输入是
int
或诸如此类的时候,他不会强制转换为float。我们不知道
whatIsMyType
来自哪里。我假设它是从
填充到becasted
,但Jon是正确的,它可能会有所不同。
ChangeType
在输入对象自己的类型时永远不会产生任何效果。它的唯一用途是,它在字符串和原语之间,以及某些类型的数值之间有一组已知的转换,因此即使输入是字符串(可以解析)或int或其他任何形式,也可以得到一个
双精度
。@Mahdi它将编译,甚至运行,但是它仍然做着绝对零的生产性工作。@Servy:在给定的确切情况下,它将是有用的-因为当
whatIsMyType
float
时,它最终将给出一个装箱的float,这似乎是它想要的。所以,我不同意你对“绝对零生产率工作”的评价。@ Servy,你假设“代码> WHYTyType=totoBask.GETType < /代码>,在这一点上,代码是完全无用的,因为它等同于代码>数据= toBeCATS/<代码> .@ HMADI-考虑为找到这个问题的其他人提供更多关于你的目标的信息,所以它能更好地帮助他们。被乔恩打败42秒。:-)你不必担心。被42秒击败的任何人都不会得到任何选票+1包括文件和警告。