引数として渡したクラスをログ出力するために、下記のようにToString関数のオーバーライドを行っています。
C#
1public class Human 2{ 3 public int ID{get;set;} 4 public string Name{get;set;} 5 public Information Info{get;set;} 6 public override string ToString() 7 { 8 var builder = new StringBuilder(); 9 builder.AppendFormat("ID:{0},", ID); 10 builder.AppendFormat("Name:{0}", Name); 11 builder.AppendFormat("Info:{0}", Info); 12 return builder.ToString(); 13 } 14} 15public class Information 16{ 17 public int Age{get;set;} 18 public string Area{get;set;} 19}
上記を下記のようにログ出力を行った場合にInformationクラスのプロパティがうまく出力されません。
C#
1using log4net; 2public void LogTest(Human human) 3{ 4 ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().Name); 5 human.ID = 1; 6 human.Name = "佐藤"; 7 human.Info.Age = 23; 8 human.Info.Area = "日本" 9 log.Info(human); 10} 11//出力結果 12//ID:1,Name:佐藤,Info:,
結果の「Info」の部分を、Age:23,Area:日本のように出力したいのですがどうすればよいでしょうか?
Debugクラスの完全名称をご提示ください。
System.Diagnostics.Debugではないようですが。
すみません記載に誤りがありましたので修正いたしました。
ログの出力にはlog4netを使っています。
C# 7.0 で導入されたデコンストラクタ(≠デストラクター)をInformationに実装すると
いい感じで返してくれると思います。
https://csharp.keicode.com/basic/csharp7-deconstruct.php
InformationのToString()をオーバーライドしたほうが簡単かも
public void LogTest(Human human) の引数に渡される human は渡す前に Info プロパティに Information クラスを初期化して代入していると想像して・・・
> 結果の「Info」の部分を、Age:23,Area:日本のように出力したい
builder.AppendFormat("Info:{0}", Info); に代えて以下のようにしたらどうなりますか?
builder.AppendFormat("Age:{0},Area{1}", Info.Age, Info.Area);