2017-02-09 27 views
1

一個字符串我有一個這樣的類:串連所有屬性與LINQ

public class MyClass 
{ 
    public int Line; 
    public string Name1; 
    public string Name2; 
} 

和MyClass的對象的集合:

List<MyClass> myObjs = myService.GetObjects(); 

其中myObjs有2個元素:

[0]: Line: 1, Name1: "Test1", Name2: "Test2" 
[1]: Line: 2, Name1: "Test3", Name2: "Test4" 

我想讓每個對象的屬性連接成一個字符串,例如:

"1,Test1,Test2;2,Test3,Test4" 

我試圖string.Join(",", myObjs.Select(x => x.Line));

但只給了我所有的線值的列表。我需要物體中的一切。

回答

6

如果是OK手動列出字段:

String.Join(";", myObjs.Select(x => $"{x.Line},{x.Name1},{x.Name2}")) 

如果沒有,但所有字段都是非集合,泛型或索引

var fields = typeof(MyClass).GetFields(); 
var result = String.Join(";", myObjs.Select(x => 
       String.Join(",", fields.Select(f => f.GetValue(x))) 
      )); 

注意:如果您的類實際上有屬性的,而不是字段,您應該使用GetProperties()而不是GetFields()


而最後一個選項,如果它是確定以覆蓋類的ToString()方法:

public override string ToString() => $"{Line},{Name1},{Name2}"; 

而這樣的對象轉換成列表看起來像

String.Join(";", myObjs) 
1

這將讓你的對象字段用逗號分隔:

myObjs.Select(x => 
       String.Join(",", new [] { x.Line.ToString(), x.Name1, x.Name2 })); 

下面是將用分號分隔每個對象並使用上述代碼的完整答案:

var result = string.Join(";", myObjs.Select(x => 
        String.Join(",", new [] { x.Line.ToString(), x.Name1, x.Name2 }) 
      ));