如何在c#中将float []转换为object []?

时间:2015-04-06 07:12:41

标签: c#

我希望在c#中转换(浮点数组到对象数组)。

所以我试图像这样转换。

Array.Copy(grossDataList.ToArray(), grossDataObjectArray, grossDataList.ToArray().Length);

但它没有用。

请告诉我。

4 个答案:

答案 0 :(得分:3)

正如其他人所提到的,虽然您可以将float投射到object(浮动将为boxed),但您无法将float[]投射到object[]一个object[],因为float[]不是Array.Copy的超类型。

其他人描述的float[] floats = new float[] { 0.1f, 0.2f}; object[] = floats.Cast<object>().ToArray(); 方法可行,但如果您使用VS2008或更高版本,则可以使用更具表现力的LINQ方法:

float

Cast<object>扩展方法会将每个object转换为IEnumerable<object>并返回float的结果,然后您可以将其转换为数组。


要明确了解为什么object可以投放到float[]object[]无法投放到float,请尝试阅读< strong>数组协方差(正如Jeppe Stig Nielsen在评论中提到的),虽然它是一个相对复杂的主题(或者更常见的是,复杂地 - 主题)。

简单地说,object可以执行GetType可以执行的任何操作(致电ToStringfloat[]),但object[]无法做到执行string可以执行的操作(例如,包含int或{{1}}),这就是他们不兼容的原因。

答案 1 :(得分:0)

对象数组长度必须小于您的情况下的浮点数组长度。

这有效

float[] farr = { 45.356F, 78.0F, 35 };
        object[] oarr = new object[farr.Length];
        Array.Copy(farr, oarr, farr.Length);

答案 2 :(得分:0)

float []不是对象[],永远不会。您可以存储值&#34; Hello&#34;在后者,但不在前者。将float []作为对象[]传递将是不安全的。

您唯一的解决方案是创建一个新对象[]并使用原始float []中的值填充它。为此使用System.Array.Copy。

答案 3 :(得分:0)

从对象到浮动:

 object[] ob = new object[] { 1.3f, 4.3f, 5.4f };
    float[] fl = ob.Cast<float>().ToArray();

从浮动到对象:

 float[] fl = new float[] { 1.3f, 4.3f, 5.4f };
 object[] ob = ob.Cast<object>().ToArray();

从对象转换为float时,您必须完全确定对象数组包含浮点数。否则你将获得InvalidCastException。如果您将float转换为object,则这不是强制性的,因为任何内容都可以在C#中表示为object