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