Я работаю над MultiSpeak API - я не знаком с этим. Функция выглядит следующим образом:
public meter[] GetMeterByAccountNumber(string accountNumber) {
meter myMeter = new meter();//IS this declaration right?
//some query work and next is sql data reader
int i = 0;
while (rdr.Read())
{
myMeter[i].deviceClass = rdr["deviceClass"].ToString();//error: Cannot apply indexing with [] to type 'meter'
i++;
}
return myMeter[]; //generates ERROR: Value expected.
}
Я не знаю, что это за тип возврата «GetMeterByAccountNumber», но он ожидает возврата массива meter[].





GetMeterByAccountNumber - это не возвращаемый тип, это имя функции.
Вы могли бы сделать что-то подобное, однако я бы назвал это GetMetersByAccountNumber, поскольку он возвращает массив/IEnumerable
Также я не уверен, какое отношение deviceClass имеет к номеру учетной записи.
using System.Linq;
using System.Collections.Generic
public IEnumerable<meter> GetMetersByAccountNumber(string accountNumber) {
var items = new List<meter>();
//some query work and next is sql data reader
while (rdr.Read())
{
var deviceClass = rdr["deviceClass"].ToString();
var meter = new meter();
//Im guessing meter has some properties to set ?
meter.deviceClass = deviceClass;
items.Add(meter);
}
return items.AsReadOnly();
}
вернуть элементы.AsReadOnly(); // элементы ошибки не существуют в текущем контексте. Спасибо
Большая проблема при запуске: невозможно сериализовать интерфейс System.Collections.Generic.IEnumerable`1[[meter, MultiSpeakWebService, Version=1.0.2119.28772, Culture=neutral, PublicKeyToken=null]].
Если я объявлю функцию как общедоступный счетчик[] GetMetersByAccountNumber(string accountNumber), то ошибка запуска исчезнет, и массив элементов теперь имеет несколько значений. Тем не менее оператор return терпит неудачу, как указано выше. Хотя ближе. Спасибо!
Функция ожидает возврата типа измерителя [] и, следовательно, терпит неудачу в заданном ответе. Что мне нужно, так это каким-то образом преобразовать список элементов в тип счетчика?
метр[] myArray = items.ToArray(); Так приближаемся. Тем не менее, возврат говорит, что не существует в текущем контексте; должно быть легко исправить.
думаю понял. Будет опубликована измененная версия вашего ответа. Большое спасибо!!
Вот что работает для меня, основываясь на ответе @Richard Friend. Спасибо Ричард!
public meter[] GetMetersByAccountNumber(string accountNumber)
{
meter[] final_return;
var items = new List<meter>();
while (rdr.Read())
{
var meter = new meter();
meter.deviceClass = rdr["deviceClass"].ToString();
items.Add(meter);
}
final_return = items.ToArray();
return final_return;
}
Спасибо. 'deviceClass' и куча других полей заполняются в текущем коде, но они заполняются только один раз, и возврат из функции в порядке - но предполагается, что функция возвращает объект массива - поэтому должно быть более одного 'meter ' значения не только один. В любом случае, я собираюсь попробовать ваш код. Спасибо!