C#中是否有类似于PHP的array_key_exists函数的等效方法?

8

C#是否有与PHP的array_key_exists函数相等的功能?

例如,我有这个PHP代码:

$array = array();
$array[5] = 4;
$array[7] = 8;
if (array_key_exists($array, 2))
    echo $array[2];

我该如何将这个转换成C#代码?

这是一个糟糕的问题 - 在每种语言中,数组的含义都不同 - 从C#的角度来看,PHP关联数组是一个字典 - 在C#中,数组没有键,只有一个顺序索引。 - web_bod
@Web_bod,System.Collections.Generic命名空间中的Dictionary<TKey, TValue>是什么? - Cole Tobin
是的 - 但他说“我有一个数组,我想知道是否包含所选键上的值” - 数组没有啊! - web_bod
4个回答

7
在C#中,数组的大小是固定的,所以您需要声明一个包含8个整数的数组。
int[] array = new int[8];

您只需要检查长度即可。
if(array.Length > 2)
{
    Debug.WriteLine( array[2] );
}

那对于值类型来说没问题,但如果你有一个引用类型的数组,比如:
Person[] array = new Person[8];

那么,您需要检查 null 值,如下所示。
if(array.Length > 2 && array[2] != null)
{
    Debug.WriteLine( array[2].ToString() );
}

3
或使用 Dictionary<TKey, TValue>。 - Cole Tobin
这个答案看起来最具信息量。但由于PHP可能对数组有不同的理解,所以Dictionary<TKey, TValue>是更好的方法。在数组中,你只有索引,因此你将会有与数组大小相同的“键”。在字典中,你只有添加的键值对数量。 - paulius_l

7
抱歉,C#不支持像PHP那样的动态数组。您可以创建一个Dictionary<TKey, TValue>(int, int),并使用.Add(int, int)进行添加。
using System.Collections.Generic;
...
Dictionary<int, int> dict = new Dictionary<int, int>();
dict.Add(5, 4);
dict.Add(7, 8);
if (dict.ContainsKey(5))
{
    // [5, int] exists
    int outval = dict[5];
    // outval now contains 4
}

支持动态数组;它们被称为列表(Lists),并且可以像 PHP 数组一样通过键进行引用。 - CompanyDroneFromSector7G
我知道我晚了_8年_才回复这个评论,但我的理解是PHP数组是稀疏的。也就是说,你可以定义$arr[0]$arr[2],但$arr[1]未定义。 - Cole Tobin

4

在C#中声明新数组时,需要提供内存分配的大小。如果你正在创建一个int数组,则在实例化时会预先填充值,因此键将始终存在。

int[] array = new int[10];
Console.WriteLine(array[0]); //outputs 0.

如果您需要一个动态大小的数组,可以使用List
List<int> array = new List<int>
array.push(0);

if (array.Length > 5)
   Console.WriteLine(array[5]);

1

您可以使用 ContainsKey

var dictionary = new Dictionary<string, int>()
{
    {"mac", 1000},
    {"windows", 500}
};

// Use ContainsKey method.
if (dictionary.ContainsKey("mac") == true)
{
    Console.WriteLine(dictionary["mac"]); // <-- Is executed
}

// Use ContainsKey method on another string.
if (dictionary.ContainsKey("acorn"))
{
    Console.WriteLine(false); // <-- Not hit
}

+1,虽然我认为重要的是他/她想要一个字典而不是一个数组。 - Chris Shaffer
刚刚了解到 PHP 数组是有序映射,不是数组或字典。我不确定在 C# 中是否有相应的东西,除非它是 SortedDictionary。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接