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

しかし、これは構築されません。

私が望むことを可能な限りエレガントに行うのを手伝ってくれる人はいますか? 2 つのループといくつかのひどいコードでそれが可能であることはわかっていますが、見栄えの良い解決策がどこかにあることは知っています。:)

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

(誤って であるとobject1想定IEnumerable<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 に答える