【问题标题】:Why is an Array.Count not allowed as its own index value?为什么不允许 Array.Count 作为自己的索引值?
【发布时间】:2014-02-27 00:10:21
【问题描述】:

我需要按字母顺序对值进行排序(invoice_no/invoiceNum)。我有以下代码可以做到这一点:

string beginningInvoiceNum = string.Empty;
string endingInvoiceNum = string.Empty;
. . .
XDocument doc = XDocument.Parse(stringifiedXML);
var DeliveredItems = doc.Descendants("DSD").Select(delItem => new
{
    lineID = delItem.Element("line_id").Value,
    invoiceNum = delItem.Element("invoice_no").Value,
    UPCCode = delItem.Element("upc_code").Value,
    desc = delItem.Element("description").Value,
. . .
}).ToList(); 

string[] invNums = new string[DeliveredItems.Count];
int i = 0;
foreach (var delItem in DeliveredItems)
{
    invNums[i] = delItem.invoiceNum;
    i++;
}
Array.Sort(invNums);
beginningInvoiceNum = invNums[0];
//endingInvoiceNum = invNums[invNums.Count - 1]; <= this does not work
endingInvoiceNum = invNums[DeliveredItems.Count-1]; // <= this works

...但是正如您在 cmets 中看到的,我最初尝试使用字符串数组的计数失败了;我被责骂了令人困惑的错误消息“运算符'-'不能应用于'方法组'和'int'类型的操作数

什么?!? invNums.Count 和 DeliveredItems.Count 不是一回事吗?为什么后者有效而前者失败?

更新

所以我的代码现在是这样的:

beginningInvoiceNum = invNums.First();
endingInvoiceNum = invNums.Last();

...我对此感到很高兴。

【问题讨论】:

标签: c# sorting generic-list arrays indexer


【解决方案1】:

invNums 是数组,它没有Count 属性(如列表)。你应该使用它的Array.Length 属性

invNums[invNums.Length - 1]

Enumerable.Count() IEnumerable 的扩展(实际上编译器认为您正在尝试使用此扩展,但您尝试使用方法组而不是执行方法):

invNums[invNums.Count() - 1]

其实在后一种情况下你可以使用Enumerable.Last()扩展:

invNums.Last()

【讨论】:

  • 这给了我线索,我也可以使用 invNums.First();谢谢!
【解决方案2】:

错误消息是由于Array.Count 引用Count 扩展方法,就好像它是一个属性一样,即没有括号。术语“方法组”是错误消息中的线索。

正如 Sergey 所写,使用 invNums.Length - 1

【讨论】:

    【解决方案3】:

    因为 DeliveredItemslist

    所以它可以得到计数

    DeliveredItems.Count
    

    invNums字符串数组

    因此我们通过

    得到数组的计数
    invNums.Count()
    

    但不是 invNums.Count 因为后者是唯一的方法。

    作为结论,invNums.Count (method) 与 DeliveredItems.Count (int) 不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2014-09-13
      • 2022-12-23
      相关资源
      最近更新 更多