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>());

但这不会建立。

任何人都可以帮助我尽可能优雅地做我想做的事吗?我意识到两个循环和一些可怕的代码是可能的,但我知道某处有一个漂亮的解决方案!:)

4

3 回答 3

3

我相信你想要这样的东西:

 List<object2> newObjects = object1.commaSeparatedListOfIds.Split(',')
                                   .Select(str =>
                                        new object2
                                        {  
                                           id = int.Parse(str),
                                           time = object1.time,
                                           passes = object1.passes
                                        })
                                   .ToList();
于 2012-09-27T16:59:36.057 回答
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>

于 2012-09-27T17:02:31.340 回答
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 字符串中可能包含无效数据。

于 2012-09-27T17:04:24.197 回答