如何获取数组中的元素

How to get an element within an array

我有一个固定的字符串列表,我把它放在一个数组中。我正在使用 IndexOf() 来从这样的数组中获取一个元素,但这似乎不起作用:

using System.Runtime;

  ...
  static string[] Alarm_Names = new string[3] {"A1",  "A2",  "A3"}
  static bool[]   arr_Alarms  = new bool[3]   {false, false, false};

  internal static void HandleAlarm(..., string code, ...)
  {
    if (arr_Alarms[IndexOf(Alarm_Names, code)]) return;       // does not compile
    if (arr_Alarms[Array.IndexOf(Alarm_Names, code)]) return; // does not compile

function/static 方法 IndexOf() 似乎不存在,尽管 this page 另有提及。
这很可能是因为我在 C# .Net Framework 4.6.1 中编程,对于上述页面的 .Net 6 版本来说,它还不够新。

如您所见,我有一个常量字符串列表,我想为每个字符串创建一个布尔值列表,如果输入一个字符串作为函数参数,我想检查用于检查值的布尔列表,函数 IndexOf() 是完美的工具。
还有其他简单的方法吗? (或者我的分析是错误的,我可以做一些非常简单的事情来完成这项工作,而不修改我的目标 .Net 框架的版本吗?)

IndexOf 是在Array class 上定义的静态方法。由于您的代码不是 class 的一部分,您需要在它前面加上 class 名称前缀,就像您在第二次尝试中所做的那样:

Array.IndexOf(Alarm_Names, code)

除此之外,代码中唯一的编译器错误是 Alarm_Names 字段中缺少分号。

修复该问题后,您的代码将编译 (除非未显示的代码部分出现其他错误)

using System; // needed for accessing "Array"

class YourClass
{
    static string[] Alarm_Names = new string[3] {"A1",  "A2",  "A3"};
    static bool[]   arr_Alarms  = new bool[3]   {false, false, false};

    internal static void HandleAlarm(..., string code, ...)
    {
      if (arr_Alarms[Array.IndexOf(Alarm_Names, code)]) return;

如果仍然无法编译,您需要列出实际遇到的编译器错误。


注意: 如果您使用的是 C# 6 或更高版本,则可以使用 using static 功能使 Array class 可以在没有 Array. 前缀的情况下调用:

using static System.Array;

class YourClass
{
    static string[] Alarm_Names = new string[3] {"A1",  "A2",  "A3"};
    static bool[]   arr_Alarms  = new bool[3]   {false, false, false};

    internal static void HandleAlarm(..., string code, ...)
    {
      if (arr_Alarms[IndexOf(Alarm_Names, code)]) return;

static modifier | using directive | C# Reference

static void Main(string[] args)
    {
        string[] Alarm_Names = new string[3] { "A1", "A2", "A3" };
        bool[] arr_Alarms = new bool[3] { false, false, false };

        Console.WriteLine(HandleAlarm(arr_Alarms, "A2", Alarm_Names));

        Console.ReadKey();
    }
    static bool HandleAlarm(bool[] a, string code, string[] A)
    {
        if (a[Array.IndexOf(A, code)])//false
        {
            return a[Array.IndexOf(A, code)];
        }
        return true;
    }