によってリスト
public static long OutputListToFile(StreamWriter writer, List<DocMetaData> listData)
{
StringBuilder md = new StringBuilder();
int rowcount = 0;
foreach (var c in listData)
{
md.Append(c.Section); md.Append(DocMetaData.SEPARATOR);
md.Append(c.DocClass); md.Append(DocMetaData.SEPARATOR);
md.Append(c.Meeting); md.Append(DocMetaData.SEPARATOR);
md.Append(c.Agency); md.Append(DocMetaData.SEPARATOR);
md.Append(c.Country); md.Append(DocMetaData.SEPARATOR);
md.Append(c.Comment); md.Append(DocMetaData.SEPARATOR);
md.Append(c.Title); md.Append(DocMetaData.SEPARATOR);
md.Append(c.Folder); md.Append(DocMetaData.SEPARATOR);
md.Append(c.File); md.Append(DocMetaData.CARRIAGE_RETURN);
try
{
writer.WriteLine(md.ToString());
rowcount++;
}
catch (Exception ex)
{
log.Fatal("Error in OutputListToFile:\r\n", ex);
}
}
return rowcount;
}
md.Append文は、現在でなければなりません
private void OutputColumnNamesAsFirstLine(StreamWriter writer)
{
StringBuilder md = new StringBuilder();
PropertyInfo[] columns;
columns = typeof(DocMetaData).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
int i = 0;
foreach (var columnName in columns)
{
i++;
md.Append(columnName.Name); md.Append(DocMetaData.SEPARATOR);
}
writer.WriteLine(md.ToString());
}
はOutputListToFileでforeachループは、私はこの順序依存性を排除することができるように書き直すことができな方法があります:非常に最初の行を書き込みルーチンと一致するように上記の正確な順序で配置。ここでDocMetaDataクラスの抜粋です:
public class DocMetaData
{
public const string SEPARATOR = "\t"; // horizontal tab is delimiter
public const string CARRIAGE_RETURN = "\r";
public string Section { get; set; }
public string DocClass { get; set; }
public string Meeting { get; set; }
public string Agency { get; set; }
public string Country { get; set; }
public string Comment { get; set; }
public string Title { get; set; }
public string Folder { get; set; }
public string File { get; set; }
ランタイムは、 'Type.GetProperties()'の結果を順序付けるのに**必須ではなく、実際には呼び出し間で**結果を並べ替えるかもしれないことに注意してください。だから、この実装は実際には欠陥があります!それが動作し続けるということは、あなたが呼び出す定義されていない振る舞いの1つの可能な結果にすぎません。たとえば、ランタイムの新しいリリースでは、コードが簡単に壊れる可能性があります。 'GetProperties()'呼び出しの結果に少なくともあなた自身の命令を課すべきです。 'OutputListToFile()'メソッドは、この同じ順序に従うべきです。 – cdhowie