Как получить доступ к элементу, находящемуся в методе Main (), из индексатора, находящегося в другом классе?

#c# #.net #class #indexer

Вопрос:

Предположим, у нас есть приведенный ниже код. Я хочу получить доступ к элементу, выделенному комментарием в методе Main() в классе, у которого есть индексатор. Индексатор также имеет комментарий в разделе «набор» кода индексатора, описывающий, где должен быть доступен элемент. Если я что-то упускаю, буду очень признателен за любой совет.

Главная():

 arrayaccess aa = new arrayaccess(); string a = "karl"; if (a is string) Console.WriteLine(aa[a]); else {  double d = Convert.ToDouble(a);  d = Math.Floor(d);  Console.WriteLine(aa[Convert.ToByte(d)]); } //set code aa[3] = "karl";//the name (string) karl is to be accessed in the indexer of "ArrayClass" class.  
 class arrayaccess  {   private string[] names = new string[] { "carl", "karl", "doe", "john" };  public string this[object index]  {  get  {  if (index is string)  {  if (names.Contains(index))  return "found";  else return "not found";  }  else  {   if (Convert.ToByte(index) gt;= names.Length)  throw new IndexOutOfRangeException("Index should be less than or equal to 3");  return names[Convert.ToByte(index)];   }   }  set  {  //it's easy to do with the get accessor  if (names.Contains(/*value here*/))//want to access here  throw new ArgumentException("Sorry, duplicate"    "values not allowed");  else names[Convert.ToByte(index)] = value;  }  } }  

Комментарии:

1. В чем проблема? Вы получаете сообщение об ошибке? Что-то не работает?

2. Если проблема связана с доступом к входящему значению в средстве set доступа, есть ли какая-то причина, по которой вы не могли просто сказать if (names.Contains(value)) ?

3. Никакой ошибки, я просто хочу проверить, находится ли имя («карл»), переданное с aa[0]=»карл», которое будет использоваться набором{} индексатора, в массиве «имена» класса arrayaccess.

4. Тогда о чем ты просишь? О чем вы хотите получить обратную связь?

5. Кстати, поскольку ваше резервное хранилище представляет собой массив, а массивы имеют фиксированную длину, вы можете захотеть проверить свой set метод, который index не выходит за пределы диапазона.

Ответ №1:

Используйте ключевое слово «значение» в своем коде:

 if(names.Contains(value))