【问题标题】:How convert System.Byte[] To System.UInt64[]?如何将 System.Byte[] 转换为 System.UInt64[]?
【发布时间】:2014-10-09 07:52:00
【问题描述】:

我尝试将任何 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&lt;T&gt;(object value)怎么写,其中T输出类型值ulong?

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

原来是唯一的办法

 ulong[] b = Array.ConvertAll((byte[])f, element => Convert.ToUInt64(element));

可惜输入类型不一定是byte[]

【问题讨论】:

  • 您需要解释您希望如何将 3 个字节的数组转换为 ulong。这样我们就不必猜测了。

标签: c# .net type-conversion


【解决方案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”的所有数据类型。

编辑: 正如Thomas Levesque 指出的Cast&lt;System.UInt64&gt;()在这里不起作用,所以我们必须在这里使用Select(ConvertFunction)

【讨论】:

  • 不,在这种情况下它不起作用。它仅适用于参考转化。
  • @askeet 这很难。如果你想指定额外的约束,他们需要进入问题。以后请注意此建议。
【解决方案2】:

你可以使用Array.ConvertAll:

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

【讨论】:

    【解决方案3】:

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

        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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2012-03-14
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多