2012-09-27 19 views
1

我的情景:拆分作爲對象屬性的字符串,從拆分字符串創建新對象。有沒有一種優雅的方式?

我有一個對象,讓我們把它叫做object1,看起來像這樣:

object1{ 
string commaSeparatedListOfIds; 
DateTime time; 
int passes; 
... 
irrelvant properties 
... 
} 

我希望做的是分裂commaSeparatedListOfIds每個值ID,並保存每個人在自己的對象(object2)和相關的其他屬性。

object2{ 
int id; 
DateTime time; 
int passes; 
} 

此複製信息,但該方法我想寫的任何其他解決方案將是驚人,凌亂。

我曾嘗試是:

List<object2> newObjects = new List<object2>(object1.commaSeparatedListOfIds.Split(',').Select(
         new object2{ 
         id int.Parse, 
         time = object1.time 
         passes = object1.passes 
         }).ToList<object2>()); 

但這不會建立。

任何人都可以幫我做我希望儘可能優雅的東西嗎?我意識到這將有可能與兩個循環和一些可怕的代碼,但我知道有一個很好看的解決方案在那裏! :)

+0

爲什麼不使用foreach循環?這很容易閱讀。 ' (在object1.commaSeparatedListofIds.Split的foreach字符串標記(」 ')){ newObjects.Add(令牌,...) } ' –

回答

2

我相信你想要的東西,如:

List<object2> newObjects = object1.commaSeparatedListOfIds.Split(',') 
            .Select(str => 
             new object2 
             { 
              id = int.Parse(str), 
              time = object1.time, 
              passes = object1.passes 
             }) 
            .ToList(); 
+0

完美,謝謝! :) –

2

在查詢語法(這是我喜歡當談到SelectMany):

var newObjects = from ob1 in object1 
       from strId in ob1.commaSeparatedListOfIds.Split(',') 
       select new object2(){ 
        id = int.Parse(strId), 
        time = ob1.time, 
        passes = ob1.passes 
       }; 
List<object2> result = newObjects.ToList(); 

(誤認爲object1IEnumerable<object1>

0
public class O1 
{ 
    public string Ids { get; set; } 
    public DateTime Time { get; set; } 
    public int Passes { get; set; } 
} 

public class O2 
{ 
    public int Id { get; set; } 
    public DateTime Time { get; set; } 
    public int Passes { get; set; } 
} 

static void Main(string[] args) 
{ 
    var o1 = new O1(); 
    o1.Ids = "1,2,3,4,5"; 
    o1.Time = DateTime.Now; 
    o1.Passes = 42; 

    var results = o1.Ids.Split(',').Select(r => new O2 { Id = int.Parse(r), Time = o1.Time, Passes = o1.Passes }); 
    foreach (var item in results) 
    { 
     Console.WriteLine("{0}: {1} {2}", item.Id, item.Time, item.Passes); 
    } 
} 

就是這樣的。不過,請謹防int.Parse(...),因爲您的Id字符串中可能包含無效數據。