0

以下の2つのクラスがあります

public class ClassX
{
    int id,
    string title,
    string description
} 

public class ClassY
{
    int id,
    string title,
    string description,
    int localeId,
    int clientId
}

以下のように、これらの各クラスから2つのリストがあります

IList<ClassX> listX = new List<ClassX>();

IList<ClassY> listY = new List<ClassY>();

listY リストを listX リストに変換する必要があります

このシナリオでは、ClassY のプロパティ、つまり

int localeId,

int clientId

値は入力されません

listY から listX リストに変換できますか

4

6 に答える 6

7

はい、もちろん:

listX = listY.Select(y => new ClassX()
{
    description = y.description,
    id = y.id,
    title = y.title
}).ToList();

ClassXこれにより、 andからすべての共通プロパティが選択され、すべてのインスタンスがClassY初期化されます。次に、新しい を作成するを呼び出します。ClassXClassYToListList<ClassX>

を追加する必要があることに注意してくださいusing System.Linq

編集:クラスのリファクタリングを検討する必要があるという@AdrianFaciuに同意する必要があります。2 つの類似したクラスを相互に変換する必要がある場合ClassXClassY.

public class ClassX
{
    public int id { get; set; }
    public string title { get; set; }
    public string description { get; set; }
}

public class ClassY : ClassX
{
    public int localeId { get; set; }
    public int clientId { get; set; }
}

ClassYは暗黙のうちに のすべてのプロパティを持ちますClassX

于 2012-09-17T07:15:49.050 に答える
2
 var result = listY.Select(y => new ClassX { 
                            id = y.id, 
                            title = y.title, 
                            description = y.description });
于 2012-09-17T07:16:08.847 に答える
2

次のコードを使用して、オブジェクトのリストを取得できClassXます。

var list = (from t in listY
           select new ClassX
                 {
                  id = t.id,
                  title = t.title,
                  description = t.description
                 }).ToList();

ただしClassY、子クラスとしてClassX継承を利用できます

次のクラス構造を持っています。

public class ClassX
{
    public int id { get; set; }
    public string title { get; set; }
    public string description { get; set; }
}

public class ClassY : ClassX
{
    public int localeId { get; set; }
    public int clientId { get; set; }
}

後で行うことができます:

List<ClassY> listY = new List<ClassY>();
listY.Add(new ClassY { id = 0, title = "sometitle1", description = "some description", localeId = 1, clientId = 2 });
listY.Add(new ClassY { id = 1, title = "sometitle2", description = "some description", localeId = 1, clientId = 2 });
listY.Add(new ClassY { id = 2, title = "sometitle3", description = "some description", localeId = 1, clientId = 2 });

List<ClassX> listX = (from t in listY
                     select (ClassX)t).ToList(); //casting to base class

ClassYのアイテムを基本クラスにキャストしますClassX

于 2012-09-17T07:16:14.320 に答える
1

以下を試してください

var listX = listY.Select(y => new ClassX { id = y.id, title = y.title, description = y.description).ToList();
于 2012-09-17T07:16:13.023 に答える
1

オブジェクトを変更したくない場合 (たとえば、Adrian による基本クラスのアイデアを実装することによって)、次の簡単な方法を実行します。

var listYtoX = listY.Select(y => new ClassX()
                                 {
                                     id = y.id,
                                     title = y.title,
                                     description = y.description
                                 }).ToList();
于 2012-09-17T07:16:33.610 に答える
0

擬似コード:

listY.Select(y=>new ClassX(){ id = ..., title = ..., description = ...}).ToList();
于 2012-09-17T07:17:20.307 に答える