【发布时间】:2023-03-11 04:35:02
【问题描述】:
这可能是一件非常简单的事情,但我已经尝试了一些事情,但无法理解如何防止覆盖 foreach -> if 语句中的值。
我有一个由Entries 组成的文件,其中有单独的Entry。我正在尝试为每个人 Entry 设置不同的值,但目前它正在正确设置它们,但在每次迭代时都会覆盖。
var inputdoc = _service.ConvertToDocument(input);
var journal = _service.ConvertFromDocument(inputdoc);
foreach (var i in inputdoc .Body)
{
foreach (var doc in journal.Entries)
{
doc.Entity = entityCode;
if (doc.Entity == 12345)
{
if (i.Number == "VALBEU1") { doc.BankAccount = "435345345"; }
if (i.Number == "VALBGB1") { doc.BankAccount = "324234234"; }
if (i.Number == "VALBHU1") { doc.BankAccount = "45342123123"; }
if (i.Number == "VALBMX1") { doc.BankAccount = "45546231"; }
if (i.Number == "VALBSE1") { doc.BankAccount = "2344353123"; }
if (i.Number == "VALBUS1") { doc.BankAccount = "234435645"; }
if (i.Number == "VALBNO1") { doc.BankAccount = "234233123"; }
}
}
}
所以问题是单个Entry 的最终结果是最终具有相同的 BankAccount 值,而它应该根据i.Number 不同而有所不同。所以我怎么能做到这样当我去的时候通过我的Entries 并设置我的Entry 值,使BankAccount 数字保持不变并移动到下一个条目..设置该值等等..
【问题讨论】:
-
请阅读how-to-ask page和How to create a Minimal, Complete, and Verifiable example以改进您的问题并帮助我们了解您的问题。
-
旁注:我建议使用
Dictionary<string, string>而不是一堆if (i.Number == ...) -
调试并逐步完成您的逻辑。人们给出了很多小的建议,这些建议是很好的代码审查,但即使是循环迭代的基础知识也没有意义。重新分析您要解决的问题,一次一行地遍历您的代码
-
问题可能是您似乎有一个不相关的外部
for循环。由于journal是在该循环之外创建的,因此您为inputdoc.Body中的每个条目迭代journal.Entities一次。如果您的代码是幂等的,这无关紧要,但如果您有设置属性的副作用,它可能会搞砸。 -
轻微优化(不会解决您的问题):使用
if (..) {..} else if (..)链而不是单独的if语句。或查看switch (i.Number) { case "VALBEU1": ..(或字典,如前所述)
标签: c# for-loop if-statement