将 PropertyDescriptor 转换为 List<Tuple<string, string>>

瑟万·阿菲菲

我有以下课程:

public class Cmp
{
    public List<Tuple<string, string>> Hdd { get; set; }
    public string Cpu { get; set; }
    public string MonitorModel { get; set; }
    public List<Tuple<string, string>> OpticDriver { get; set; }
}

我也使用此代码转换List<Cmp>为 CSV:

public static void WriteToCsv<T>(IEnumerable<T> data)
{
    var strBuilder = new StringBuilder();
    PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
    foreach (PropertyDescriptor prop in props)
    {
        strBuilder.Append(prop.DisplayName); // header
        strBuilder.Append(",");
    }
    strBuilder.AppendLine();
    foreach (T item in data)
    {
        foreach (PropertyDescriptor prop in props)
        {
            strBuilder.Append(prop.Converter.ConvertToString(
                prop.GetValue(item)));
            strBuilder.Append(",");
        }
        strBuilder.AppendLine();
    }

    File.WriteAllText(@"C:\list.csv", strBuilder.ToString());
}

只是想知道如何迭代HddOpticDriver里面的属性WriteToCsv<T>目前的结果是这样的:

 Hdd            Cpu     MonitorModel    OpticDriver
(Collection)    CPU1    Monitor1        (Collection)
(Collection)    CPU2    Monitor2        (Collection)
(Collection)    CPU3    Monitor3        (Collection)

我希望它是这样的:

 Hdd            Cpu     MonitorModel    OpticDriver
Hdd1-Hdd2       CPU1    Monitor1        Disk1-Disk2
Hdd1-Hdd2       CPU2    Monitor2        Disk1-Disk2
Hdd1-Hdd2       CPU3    Monitor3        Disk1-Disk2
马里乌什·贾姆罗

解决方案1

将值转换为List<Tuple<string,string>>与其他属性不同的处理方式

foreach (PropertyDescriptor prop in props)
{
    var value = prop.GetValue(item);
    if(value is List<Tuple<string, string>> tupleList)
    {
        string tupleString = ConvertTupleListToString(tupleList);
        strBuilder.Append(tupleString);
    }
    else
    {
        strBuilder.Append(prop.Converter.ConvertToString(value));
    }
    strBuilder.Append(",");
}

解决方案2

与其使用泛型,不如List<Tuple<string,string>>考虑使用您自己的类似 List 的类型和自定义ToString()实现,这将返回您想要的任何内容。

public class HddInfoList : List<Tuple<string, string>>
{
    public HddInfoList(IEnumerable<Tuple<string, string>> collection) : base(collection)
    {

    }

    public override string ToString()
    {
        //For example return first items of tuple separated by '-'
        return string.Join("-", this.Select(m => m.Item1));
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将scala List [String] / List [Object]转换为model / HList / tuple

来自分类Dev

Powershell将String []转换为List <String>

来自分类Dev

将List <string>转换为IEnumerator <string>

来自分类Dev

Powershell将String []转换为List <String>

来自分类Dev

将List [Double]转换为List [String]

来自分类Dev

将List <T>转换为List <string>

来自分类Dev

将HashMap <String,String>转换为HashMap <String,List <String >>()

来自分类Dev

将HashMap <String,String>转换为HashMap <String,List <String >>()

来自分类Dev

WCF代理将List <string []>转换为List <List <string >>

来自分类Dev

将XmlNodeList转换为List <string>

来自分类Dev

将IList <Object>转换为List <String>

来自分类Dev

将String []转换为List <SelectList>

来自分类Dev

将ArrayList转换为List <string []>

来自分类Dev

将XmlNodeList转换为List <string>

来自分类Dev

将List <ApplicationInfo>转换为String []

来自分类Dev

将ObjectResult <string>转换为List <T>

来自分类Dev

将List <ArrayList>转换为String []

来自分类Dev

将 List<DateTime> 转换为 String

来自分类Dev

将(String,List [(String,String)])转换为JSON对象

来自分类Dev

如何将Mono <Map <String,Optional <String >>>>>转换为Flux <Tuple <String,Optional <String >>>>>

来自分类Dev

将Future [List [String]]转换为List [String]

来自分类Dev

将Option [List [String]]转换为List [String]

来自分类Dev

将List <List <object >>转换为List <List <string >>

来自分类Dev

将List <String>强制转换为String返回类型

来自分类Dev

关于使用GSON将List <String>转换为String

来自分类Dev

如何将List <NameValuePair>转换为hashMap <String,String>?

来自分类Dev

将Scala seq <string>转换为Java List <string>

来自分类Dev

将List <String>转换为Map <String,Integer>

来自分类Dev

将Map <String,Object>转换为Map <String,List <Object >>

Related 相关文章

  1. 1

    将scala List [String] / List [Object]转换为model / HList / tuple

  2. 2

    Powershell将String []转换为List <String>

  3. 3

    将List <string>转换为IEnumerator <string>

  4. 4

    Powershell将String []转换为List <String>

  5. 5

    将List [Double]转换为List [String]

  6. 6

    将List <T>转换为List <string>

  7. 7

    将HashMap <String,String>转换为HashMap <String,List <String >>()

  8. 8

    将HashMap <String,String>转换为HashMap <String,List <String >>()

  9. 9

    WCF代理将List <string []>转换为List <List <string >>

  10. 10

    将XmlNodeList转换为List <string>

  11. 11

    将IList <Object>转换为List <String>

  12. 12

    将String []转换为List <SelectList>

  13. 13

    将ArrayList转换为List <string []>

  14. 14

    将XmlNodeList转换为List <string>

  15. 15

    将List <ApplicationInfo>转换为String []

  16. 16

    将ObjectResult <string>转换为List <T>

  17. 17

    将List <ArrayList>转换为String []

  18. 18

    将 List<DateTime> 转换为 String

  19. 19

    将(String,List [(String,String)])转换为JSON对象

  20. 20

    如何将Mono <Map <String,Optional <String >>>>>转换为Flux <Tuple <String,Optional <String >>>>>

  21. 21

    将Future [List [String]]转换为List [String]

  22. 22

    将Option [List [String]]转换为List [String]

  23. 23

    将List <List <object >>转换为List <List <string >>

  24. 24

    将List <String>强制转换为String返回类型

  25. 25

    关于使用GSON将List <String>转换为String

  26. 26

    如何将List <NameValuePair>转换为hashMap <String,String>?

  27. 27

    将Scala seq <string>转换为Java List <string>

  28. 28

    将List <String>转换为Map <String,Integer>

  29. 29

    将Map <String,Object>转换为Map <String,List <Object >>

热门标签

归档