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

标签 c# arrays null element

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

我已经完成了主要算法,但我无法将元素设置为 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;
}

这是主要内容:

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

提前致谢! :-)

最佳答案

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

  1. 如果要将数组中的元素设置为空,请确保数组的元素类型是引用类型。

例如:int是一个值类型,因此不能设置为null。但是,您可以使用 object,或者更适合整数:使用 nullable-int 变体:int?,并将其设置为 null。

简而言之,这行不通:

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

所以,在代码中:

List<int> foo = new List<int> { 1,2,3,4,5};
foo.RemoveAt(2);
  1. 如果您删除了列表中间的大量元素,您可能不是在寻找列表。

如果您需要的话,有一些数据结构更适合“随机删除”。例如,链接列表允许您删除中间元素而不移动所有数据,如果您需要“值袋”,请使用 HashSetDictionary

  1. 如果你还想要一个数组......

这当然是可能的,只是可能效率不高:

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

关于c# - 如何在 C# 中将数组的特定元素设置为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626444/

相关文章:

c# - EWS : "The remote server returned error (401) Unauthorized"

c# - 如何在 UTF-8 字节数组中找到字符串的起始索引? (C#)

arrays - powershell中数组的正确语法是什么?

javascript - 检查数组元素是否存在的安全方法?

sql-server - 当有 NULL 值的结果时 NOT IN 子查询失败

c# - 将对象类型数据转换为值类型的最佳方法

c# - Silverlight : System. 异常中未处理的异常

java - 获取java中特殊字符前的字符串值

powershell - 为什么在执行$ NULL =“FOO”时Powershell不会抛出错误?

c# - Silverlight Toolkit 图表组件中可能存在内存泄漏 - 求助!