c# - If 语句覆盖先前的 Setter
问题描述
这可能是一件非常简单的事情,但我已经尝试了一些事情并且无法理解如何防止覆盖 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
数字仍然存在相同并移动到下一个条目..设置该值等等..
解决方案
您可以压缩这两个序列以创建输入文档和日记帐条目对。此外,您可以创建字典以通过输入代码查找帐号。
var accountDict = new Dictionary<string, string>() {
["VALBEU1"] = "435345345",
["VALBGB1"] = "324234234",
["VALBHU1"] = "45342123123",
...
};
var inputdoc = _service.ConvertToDocument(input);
var journal = _service.ConvertFromLedger(ledger);
// Create tuples of input docs and journal entries
var inputAndDocs = inputdoc.Body.Zip(journal.Entries, (input, doc) => (input, doc);
foreach (var pair in inputAndDocs)
{
var doc = pair.doc;
doc.Entity = entityCode;
if (doc.Entity == 23380 &&
accountDict.TryGetValue(pair.input.Number, out var account))
{
doc.BankAccount = account;
}
}
这假设输入文档和日记帐分录必须按给定顺序成对匹配。
您始终分配相同的entityCode
值,然后在循环内部测试它是否与常数匹配。由于entityCode
从不更改,您可以提前进行此测试并完全跳过整个过程。
if (entityCode == 23380) {
// TODO: initialize
foreach (var pair in inputAndDocs)
{
var doc = pair.doc;
doc.Entity = entityCode;
if (accountDict.TryGetValue(pair.input.Number, out var account)) {
doc.BankAccount = account;
}
}
}
为什么你的方法不起作用?让我们做一个简单的例子:
int[] aArray = { 1, 2, 3 };
int[] bArray = { 10, 20, 30 };
foreach (int a in aArray) {
foreach (int b in bArray) {
Console.WriteLine($"{a}, {b}");
}
}
印刷
1, 10
1, 20
1, 30
2, 10
2, 20
2, 30
3, 10
3, 20
3, 30
使用压缩序列和单个 foreach;然而,产量
1, 10
2, 20
3, 30
除了压缩,您还可以使用单个 for 循环
for (int i = 0; i < Math.Min(a.Length, b.Length); i++) {
Console.WriteLine($"{aArray[i]}, {bArray[i]}");
}
推荐阅读
- r - 如何绘制这些随机变量?(半柯西、马蹄、拉普拉斯、正常)
- azure - 将 B2C AD 用户存储与 Blazor 一起使用 - 陷入无限循环
- javascript - 在另一个电子表格上向另一个电子表格发起 UI 提示
- linux - 测试匹配模式的文件数,如果有超过 1 个,可以删除最旧的文件
- java - 使用 Teiid Spring Boot 的多租户
- kotlin - 如何在scatter mp mp Android图表中绘制趋势线(或限制线)
- r - 如何通过对其行之一的条件评估来设置组的整个列
- android - 通过命令行为 android 构建我的 Unity 项目的简单命令
- swift - 当您可以访问同一文件中的类时,Swift 为什么要使用扩展?
- apache-flink - Flink KeyedProcessFunction 不向后续步骤发送数据