7

C# 是否有任何等效于 PHP 的array_key_exists函数?

例如,我有这个 PHP 代码:

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

我如何把它变成 C#?

4

4 回答 4

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
}
于 2012-05-19T19:30:26.717 回答
5

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() );
}
于 2012-05-19T19:29:31.660 回答
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]);
于 2012-05-19T19:30:58.560 回答
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
}
于 2012-05-19T19:27:03.237 回答