我希望在c#中转换(浮点数组到对象数组)。
所以我试图像这样转换。
Array.Copy(grossDataList.ToArray(), grossDataObjectArray, grossDataList.ToArray().Length);
但它没有用。
请告诉我。
答案 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
可以执行的任何操作(致电ToString
或float[]
),但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