0

私はこれに似たクラスを持っています:

public class Channel
{
   public string Title {get;set;}
   public Guid Guid {get;set;}
   public List<Channel> Children {get;set;}
   // a lot more properties here
}

このクラスツリーを同じツリー構造に変換する必要がありますが、プロパティが少なくなっています(プロパティの名前が異なります)。

public class miniChannel
{
    public string title {get;set;}
    public string key {get;set;}
    public List<miniChannel> children {get;set;}
    // ALL THE OTHER PROPERTIES ARE NOT NEEDED
}

次の関数を使用すると、ツリーを簡単にトラバースできると思いました。

public IEnumerable<MyCms.Content.Channels.Channel> Traverse(MyCms.Content.Channels.Channel channel)
{
    yield return channel;
    foreach (MyCms.Content.Channels.Channel aLocalRoot in channel.Children)
    {
        foreach (MyCms.Content.Channels.Channel aNode in Traverse(aLocalRoot))
        {
            yield return aNode;
        }
    }
}

関数を変更して、を返すことができるようにするにはどうすればよいIEnumerable<miniChannel> ですか、あるいは、それを行う他の方法はありますか?ソースクラスを変更できないことに注意してくださいChannel

4

1 に答える 1

2

ツリーを再帰的に新しいタイプに変換します。

miniChannel Convert(Channel ch)
{
    return new miniChannel
    {
        title = ch.Title,
        key = ch.Guid.ToString(),
        children = ch.Children.Select(Convert).ToList()
    };
}
于 2012-11-14T13:00:49.573 に答える