【问题标题】:Convert int[] array to ushort[] array将 int[] 数组转换为 ushort[] 数组
【发布时间】:2020-05-19 08:40:32
【问题描述】:

我需要将int[] 数组转换为ushort[] 数组,以便使用这两种类型数组中的Array.Copy() 方法。

我应该使用哪种方法?

【问题讨论】:

  • 循环是一种公认​​的迭代数组或列表的方法。我怀疑是否存在为此的预制实现,因为您将需要处理不适合ushortint 值。所以你需要实现错误处理。只要您只有原始类型,您就会自动拥有数据的副本,因此您可能甚至不需要Array.Copy()

标签: c# arrays int ushort


【解决方案1】:
var arr = Array.ConvertAll(inputs, val => checked((ushort)val));

这里Array.ConvertAll的好处是它从一开始就对目标数组进行了正确的大小调整,所以它从不分配多个数组,使用起来很方便。

这里的checked 会导致intushort 的转换在检测到溢出时抛出异常;这是默认完成的。

【讨论】:

    【解决方案2】:

    从 int 数组中获取 ushort 数组的简单方法是:

    public static void Main(string[] args)
        {
            int[] intArr = new int[5]{1,2,3,4,5}; // Creates an array of ints 
            ushort[] ushortArr = new ushort[5];   // Creates an array of ushorts
    
            // Copy the int array to the ushort array
            for(int i=0; i<intArr.Length; i++){
                ushortArr[i] = (ushort)intArr[i];
            }
    
            // Prints the ushort array
            foreach(ushort u in ushortArr){
                Console.Write(u+", ");
            }
        }
    

    这个程序的输出是:

    1, 2, 3, 4, 5,
    

    注意:需要保证ushort数组的长度和int数组的长度一致。

    我相信这是一个非常简单的解决方案。 希望对你有帮助:)

    【讨论】:

    • 如果你说new int[]{1,2,3,4,5};,编译器会帮你算出长度,如果你说new ushort[intArr.Length];,那么不管你怎么改内容,它都会自动得到正确的长度intArr.
    【解决方案3】:

    有更简洁的替代方案,但假设您需要在 int 不能是无符号短时做一些事情:

        public ushort[] ToUnsignedShortArray(int[] intArray)
        {
            if (intArray == null)
            {
                return new ushort[0];
            }
    
            var shortArray = new ushort[intArray.Length];
            for (var i = 0; i < intArray.Length; i++)
            {
                // add your logic for determining what to do if the value can't be an unsigned short
                shortArray[i] = (ushort)intArray[i];
            }
    
            return shortArray;
        }
    

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2011-04-06
      • 2015-06-12
      相关资源
      最近更新 更多