using System;
using System.Collections.Generic;
public class Payment
{
public int PaymentId { get; set; } // 自動生成される
public DateTime Posted { get; set; }
public bool InOut { get; set; }
public int? SubjectNameId { get; set; }
public string ItemName { get; set; }
public string PaymentName { get; set; }
public int? PaymentTypeId { get; set; }
public int? PaymentMethodId { get; set; }
public int? IncomeCategoryId { get; set; }
public int? IncomeTypeId { get; set; }
public decimal Amount { get; set; }
}
public class Program
{
// 共通のTryGetValueラッパー(見つからなければnull)
private static int? GetId(Dictionary<string, int> dict, string key)
{
return dict.TryGetValue(key, out var value) && value != 0 ? value : (int?)null;
}
public static void Main()
{
int thisYear = DateTime.Now.Year;
int previousMonth = DateTime.Now.Month - 1;
if (previousMonth == 0) { previousMonth = 12; thisYear--; }
// 各Id辞書
var subjectNameDict = new Dictionary<string, int> { { "家計", 1 }, { "事業", 2 } };
var paymentTypeDict = new Dictionary<string, int> { { "予算", 10 }, { "支出", 20 } };
var paymentMethodDict = new Dictionary<string, int> { { "現金", 100 }, { "銀行振込", 200 } };
var incomeCategoryDict = new Dictionary<string, int> { { "給与", 300 }, { "副業", 400 } };
var incomeTypeDict = new Dictionary<string, int> { { "定期", 500 }, { "臨時", 600 } };
// 複数のPaymentデータ定義(キー名と金額)
var paymentData = new[]
{
new { SubjectKey = "家計", TypeKey = "予算", MethodKey = "現金", CategoryKey = "給与", IncomeTypeKey = "定期", Amount = 268000m, ItemName = "今月予算" },
new { SubjectKey = "事業", TypeKey = "支出", MethodKey = "銀行振込", CategoryKey = "副業", IncomeTypeKey = "臨時", Amount = 150000m, ItemName = "事業支出" }
};
var payments = new List<Payment>();
foreach (var data in paymentData)
{
payments.Add(new Payment
{
Posted = new DateTime(thisYear, previousMonth, 1),
InOut = true,
SubjectNameId = GetId(subjectNameDict, data.SubjectKey),
ItemName = data.ItemName,
PaymentName = null,
PaymentTypeId = GetId(paymentTypeDict, data.TypeKey),
PaymentMethodId = GetId(paymentMethodDict, data.MethodKey),
IncomeCategoryId = GetId(incomeCategoryDict, data.CategoryKey),
IncomeTypeId = GetId(incomeTypeDict, data.IncomeTypeKey),
Amount = data.Amount
});
}
// 確認出力
foreach (var p in payments)
{
Console.WriteLine($"Posted: {p.Posted:yyyy-MM-dd}, SubjectNameId: {p.SubjectNameId}, Amount: {p.Amount}");
}
}
}
改良点
共通化
GetId メソッドで TryGetValue の処理を一元化し、見つからない場合は null を返す。
ループ生成
複数の Payment を匿名型配列 paymentData に定義し、ループで List<Payment> に追加。
可読性向上
辞書キーと金額をまとめて管理できるため、コードが短くなり保守性が高い。
この形なら、辞書のキーや金額を追加するだけで新しい Payment を簡単に生成できます。
もし必要なら、この paymentData を外部設定ファイルやDBから読み込む形にもできます。
次はこのコードを ASP.NET Core MVC の Controller 内で使える形 に書き換えたバージョンも作れますが、それも提示しますか?
そうすれば実際のアプリに組み込みやすくなります。
Powered by Froala Editor