如何将System.Byte []转换为System.UInt64 []?

时间:2014-10-09 07:52:00

标签: c# .net type-conversion

我尝试将任何C#对象转换为System.UInt64 []。

System.Byte[] to System.UInt64[].
double[] to System.UInt64[].
int[] to System.UInt64[].

示例,将对象f1,f2转换为ulong b []

 object f1 = new Byte[3] { 1, 2, 3 };  
 ulong b[]  = Convert<ulong>(f1); //---  ?

 object f2 = new double[3] { 1, 2, 3 };  
 b  = Convert<ulong>(f2); //---  ?

输出

b[0] = 1
b[1] = 2
b[3] = 3

告诉我如何编写函数代码Convert<T>(object value),其中T输出类型值为ulong?

限制:Framework 2.0,输入类型可以从对象f。

获得

结果证明了制作

的唯一方法
 ulong[] b = Array.ConvertAll((byte[])f, element => Convert.ToUInt64(element));

不幸的是输入类型不一定是byte []

3 个答案:

答案 0 :(得分:1)

使用linq表达式:

System.Byte[] source = new System.Byte[] { 1, 2, 3 };
// does not work: System.UInt64[] target = source.Cast<System.UInt64>().ToArray();
System.UInt64[] target = source.Select(b => (System.UInt64)b).ToArray();

这适用于源中的所有数据类型,可以转换为System.UInt64&#39;。

修改 由于Thomas Levesque指出Cast<System.UInt64>()在这里不起作用,所以我们必须在这里使用Select(ConvertFunction)

答案 1 :(得分:0)

您可以使用Array.ConvertAll

byte[] bytes = new byte[3] { 1, 2, 3 };
ulong[] ulongs = Array.ConvertAll<byte, ulong>(b => (ulong)b);

答案 2 :(得分:0)

解决了这个问题,但也许有更好的决定

    static T[] MyConvert<T>(object value){
        T[] ret = null;
        if (value is Array)
        {
            Array arr = value as Array;
            ret = new T[arr.Length];
            for (int i = 0 ; i < arr.Length; i++ )
            {
                ret[i] =  (T)Convert.ChangeType(arr.GetValue(i), typeof(T));.
            }
        }
        return ret;
    }