如何在C#中设置null数组的特定元素?

时间:2015-06-03 17:07:56

标签: c# arrays null element

我正在做一个控制台应用程序,如果传递的number by参数作为数组的元素出现多次,则删除数组的元素。

我已经完成了主算法但是我无法将元素设置为null。这是我的代码:

static int[] RemoveElement(ref int[] array, int num)
{
    int i;
    for (i = 0; i < array.Length; i++)
    {
        if (array[i] == num)
        {
            array[i] = 1; //This is a temporal solution.
        }
    }

    return array;
}

这是Main:

static void Main(string[] args)
{
    int[] a = {10, 2, 2, 3, 4};

    Console.WriteLine("Write a number:");
    int b = int.Parse(Console.ReadLine());

    int[] arrayInts = RemoveElement(ref a, b);

    foreach (var variable in arrayInts)
    {
        Console.WriteLine(variable);
    }

    Console.ReadKey();
}

提前致谢! : - )

2 个答案:

答案 0 :(得分:1)

我不完全确定你追求的是什么,但让我理顺一些事情。这应该可以解决您的问题。

  1. 如果要将数组中的元素设置为null,请确保该数组的元素类型是引用类型。
  2. 例如:int是值类型,因此不能设置为null。但是,您可以使用object或更好的整数:使用nullable-int变体:int?,并将其设置为null。

    简而言之,这不起作用:

    int[] foo = new int[10];
    foo[1] = null; // error: int is a value type
    
    1. 如果要修改数组,请在列表中执行;即使你可以重新分配和复制数组的元素,它也容易出错并且可能会给你带来问题。
    2. 所以,在代码中:

      List<int> foo = new List<int> { 1,2,3,4,5};
      foo.RemoveAt(2);
      
      1. 如果删除列表中间的大量元素,则可能不会查找列表。
      2. 有些数据结构更适合随机删除&#39;如果这就是你想要的。例如,链接列表允许您删除中间元素而不移动所有数据,如果您需要一组值,请使用HashSetDictionary <。 / p>

        1. 如果你还想要一个阵列......
        2. 当然可能,可能效率不高:

          int[] array = new int[10]; //...
          Array.Copy(array, src, array, src-1, array.Length - src - 1);
          Array.Resize(ref array, array.Length-1);
          

答案 1 :(得分:0)

您可以使用LINQ删除重复的元素:

var intArray = new[] { 10, 2, 2, 3, 4 };
var remove = intArray.Distinct().ToArray();

正如其他人所说,没有NULL int。

同样,您可以使用List

尝试相同的操作
List<Type> list1 = list.Distinct().ToList<Type>();