在 class 属性中设置自定义列名称以导出到文件

Setting custom column names in a class properties to export to a file

我正在尝试创建一个带有竖线 (|) 分隔符的 .dat 文件。 我不确定如何设置可在 .dat 文件中使用的自定义列名称。 我有一个看起来像这样的 class:

public partial class ExportData
{
    [DatColumnName="Test Code 123"]
    public string Code { get; set; }
    [DatColumnName="Test Name 123"]
    public string Name { get; set; }
    [DatColumnName="Test Address_123"]
    public string Address { get; set; }
}

因此,我想在文件中得到这样的东西:

Test Code 123|Test Name 123|Test Address_123
1|Name1|Address1
etc.

我猜下面的代码适合您。 我可以在没有自定义属性的情况下处理它。

代码

public static class Extensions
{
    public static string Piped<T>(this IList<T> source)
    {
        var sb = new StringBuilder();

        var pInfo = typeof(T).GetProperties().Where(x => x.GetCustomAttributes<DisplayNameAttribute>().Any());

        bool first = true;

        foreach (var i in source)
        {
            if (first)
            {
                //foreach (var h in pInfo.Select(x => x.GetCustomAttribute<DisplayNameAttribute>().DisplayName))
                //{
                //    sb.Append(h);
                //    sb.Append('|');
                //}

                sb.Append(string.Join('|', pInfo.Select(x => x.GetCustomAttribute<DisplayNameAttribute>().DisplayName)));

                sb.Append(Environment.NewLine);

                first = false;
            }

            foreach (var y in i.GetType().GetProperties().Where(x => x.GetCustomAttributes<DisplayNameAttribute>().Any()))
            {
                sb.Append(i.GetType().GetProperty(y.Name).GetValue(i, null).ToString());
                sb.Append('|');
            }

            sb.Append(Environment.NewLine);
        }

        return sb.ToString();
    }
}

用法

public partial class ExportData
    {
        [DisplayName("Test Code 123")]
        public string Code { get; set; }
        [DisplayName("Test Name 123")]
        public string Name { get; set; }
        [DisplayName("whatever you want")]
        public string Address { get; set; }
    }

 static void Main(string[] args)
    {

        var lst = new List<ExportData>() {

        new ExportData{ Code = "c1", Name ="n1", Address = "a1" },
        new ExportData{ Code = "c2", Name ="n2", Address = "a2" },
        new ExportData{ Code = "c3", Name ="n3", Address = "a3" },

        };


        Console.WriteLine(lst.Piped());
        Console.ReadKey();
    }

结果

Test Code 123|Test Name 123|Whatever you want|
c1|n1|a1|
c2|n2|a2|
c3|n3|a3|