【问题标题】:MultiSpeak API: How to Put Database Values in an ArrayMultiSpeak API:如何将数据库值放入数组中
【发布时间】:2019-06-18 09:59:08
【问题描述】:

我正在开发 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[] 数组。

【问题讨论】:

    标签: c# arrays while-loop


    【解决方案1】:

    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();
    }
    

    【讨论】:

    • 谢谢。 'deviceClass' 和一堆其他字段填充在当前代码中,但它们只填充一次,并且从函数返回很好 - 但函数应该返回一个数组对象 - 所以应该有不止一个米' 值不只是一个。无论如何,我要试试你的代码。谢谢!
    • 返回 items.AsReadOnly(); // 当前上下文中不存在错误项。谢谢
    • 启动时出现更大的问题:无法序列化接口 System.Collections.Generic.IEnumerable`1[[meter, MultiSpeakWebService, Version=1.0.2119.28772, Culture=neutral, PublicKeyToken=null]]。
    • 如果我将函数声明为 public Meter[] GetMetersByAccountNumber(string accountNumber) 那么启动错误就会消失,实际上 items 数组现在有多个值。如上所述,return 语句仍然失败。不过越来越近了。谢谢!
    • 该函数期望返回meter[] 类型,因此在给出的答案中失败。我需要以某种方式将项目列表转换为仪表类型?
    【解决方案2】:

    根据@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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2021-04-10
      • 2021-12-26
      • 2015-06-18
      • 2013-08-21
      • 1970-01-01
      相关资源
      最近更新 更多