如何在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包括文件和警告。