C# 马修沃森:我通常会同意,谢谢你指出这一点。在这种情况下,这是有争议的,因为转换器只是去除了一些小瑕疵(基本上是解析树数据->AST),所以组合它们是可以的(在我看来)。但这一点很好@马修沃森提出了一个很好的观点。LDbList列表表示项目列表。转换器是一个

C# 马修沃森:我通常会同意,谢谢你指出这一点。在这种情况下,这是有争议的,因为转换器只是去除了一些小瑕疵(基本上是解析树数据->AST),所以组合它们是可以的(在我看来)。但这一点很好@马修沃森提出了一个很好的观点。LDbList列表表示项目列表。转换器是一个,c#,generics,subclass,C#,Generics,Subclass,马修沃森:我通常会同意,谢谢你指出这一点。在这种情况下,这是有争议的,因为转换器只是去除了一些小瑕疵(基本上是解析树数据->AST),所以组合它们是可以的(在我看来)。但这一点很好@马修沃森提出了一个很好的观点。LDbList列表表示项目列表。转换器是一个单独的对象,它将一个对象转换为另一个对象。它们是两个不同的物体,有不同的行为。我以前已经接受了答案,但你的答案很好。“隐藏脚手架”是我非常渴望做的事情;我不喜欢重复的功能,即使是一行程序。我已经尝试过静态方法了,这可能就是我要做的。干杯我以前已


马修沃森:我通常会同意,谢谢你指出这一点。在这种情况下,这是有争议的,因为转换器只是去除了一些小瑕疵(基本上是解析树数据->AST),所以组合它们是可以的(在我看来)。但这一点很好@马修沃森提出了一个很好的观点。LDbList列表表示项目列表。转换器是一个单独的对象,它将一个对象转换为另一个对象。它们是两个不同的物体,有不同的行为。我以前已经接受了答案,但你的答案很好。“隐藏脚手架”是我非常渴望做的事情;我不喜欢重复的功能,即使是一行程序。我已经尝试过静态方法了,这可能就是我要做的。干杯我以前已经接受了这个答案,但你的答案很好。“隐藏脚手架”是我非常渴望做的事情;我不喜欢重复的功能,即使是一行程序。我已经尝试过静态方法了,这可能就是我要做的。干杯
public class LDBList<T> : List<T> where T : LDBRootClass {
    // typical constructor
    public LDBList(LDBList<T> x) : base(x) { }
    ...
}
public LDBList(
        Func<A, T> converter, 
        IList<A> aList)
{
    foreach (var x in aList) {
        this.Append(converter(x));
    }
}
public class LDBList<A, T> : List<T> where T : LDBRootClass
{
    // typical constructor
    public LDBList(LDBList<A, T> x) : base(x) { }

    public LDBList(
        Func<A, T> converter,
        IList<A>   aList)
    {
        foreach (var x in aList)
        {
            this.Append(converter(x));
        }
    }
}
public static class LDBListCreator
{
    public static LDBList<T> CreateFrom<T, A>(Func<A, T> converter, IList<A> aList) where T: LDBRootClass
    {
        var result = new LDBList<T>();
        result.AddRange(aList.Select(converter));
        return result;
    }
}
public LDBList(IEnumerable<T> items) : base(items)
{
}
public class LDBRootClass
{
}

public class DerivedLDBRootClass : LDBRootClass
{
    public DerivedLDBRootClass(string value)
    {
        // .. whatever
    }
}
var strings = new List<string> { "One", "Two", "Three", "Four", "Five" };
var result  = new LDBList<DerivedLDBRootClass>(strings.Select(item => new DerivedLDBRootClass(item)));
public class Converter<T,A>
{
    public LDbList<T> CreateLdbList(IList<A>) {
       var list = new LdbList<T>();
       // do the conversion here
       return list;
    }
}
var Converter<X,Y> = new Converter();
var result = Converter.Convert(originalData);