c# - 为什么不允许 Array.Count 作为自己的索引值?

标签 c# sorting generic-list arrays indexer

我需要按字母顺序对值进行排序 (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

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

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

更新

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

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

...对此我很高兴,就像一只未烤过的蛤蜊。

最佳答案

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

invNums[invNums.Length - 1]

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

invNums[invNums.Count() - 1]

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

invNums.Last()

关于c# - 为什么不允许 Array.Count 作为自己的索引值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056370/

相关文章:

javascript - 将数字数组从 ajax 传递到 Controller

c# - 从列表框项目到具有重复项目的文本框

c# - 使用 ASP.NET 样板将 ValueObject 存储在数据库中

c# - 通过Windows API代码包获取网络DWG文件的缩略图

unix - 按文件名的长度对文件名进行排序

c# - 错误CS1061-List <T> .Item [Int32]属性

python - 在 python 3.3 中按日期对二维数组进行排序

ruby-on-rails - Datamapper:通过关联对结果进行排序

java - 类似的 C# .net lambda 搜索 java 7 通用列表

vb.net - 在 vb.NET listOf 中使用 findAll 然后排序