#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))