2

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

我应该使用哪种方法?

4

3 回答 3

4
var arr = Array.ConvertAll(inputs, val => checked((ushort)val));

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

如果检测到溢出,checkedhere 会导致inttoushort转换抛出异常;默认情况下这样做。

于 2020-05-19T08:50:46.003 回答
1

从 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 数组的长度相同。

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

于 2020-05-19T08:57:52.593 回答
1

有更清洁的选择,但假设你需要在 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;
    }
于 2020-05-19T09:01:07.363 回答