一种类型中的两个通用列表

时间:2015-05-06 06:17:16

标签: c# wpf xaml generics

我想用XAML设置泛型变量的样式。 为此,我需要{x:Type myTypes:theType}

所以我有:

public class BaseClass
{
    //
}

public class ClassA : BaseClass
{
    //
}

public class ClassB : BaseClass
{
    //
}

public class ListA : List<ClassA>
{
    //
}

public class ListB : List<ClassB>
{
    //
}

我是否有可能创建一个可以收集ListA或ListB的类?

我需要将它用于带有TargetType的DataTemplate,我想在没有TemplateSelector的情况下为ListA和ListB创建一个模板。

谢谢!

2 个答案:

答案 0 :(得分:0)

不,但您可以将通用功能实现为接口。

在此示例中,我修改了您的ListAListB以公开通用界面。我承认我不太了解WPF,但这可以让你在ListAListB实例中使用常用方法。

public class BaseClass
{
    public string BaseClassFoo { get; set; }
}

public class ClassA : BaseClass
{
    public string ClassAFoo { get; set; }
}

public class ClassB : BaseClass
{
    public string ClassBFoo { get; set; }
}

public interface IMyList {
    void CommonOperation();
}

public class ListA : List<ClassA>, IMyList
{
    public void CommonOperation() {
        Console.WriteLine(this[0].ClassAFoo);
    }
}

public class ListB : List<ClassB>, IMyList
{
    //
    public void CommonOperation() {
        Console.WriteLine(this[0].ClassBFoo);
    }
}

class Program {
    private static void Main(string[] args) {
        IMyList a = new ListA { new ClassA { ClassAFoo = "I'm an A" } };
        IMyList b = new ListB { new ClassB { ClassBFoo = "I'm a B" } };

        a.CommonOperation();
        b.CommonOperation();
    }
}

输出:

I'm an A
I'm a B

答案 1 :(得分:0)

你是什​​么意思?像这样的东西?

List<int> listA = new List<int>() { 1, 2, 3 };
List<string> listB = new List<string>() { "A", "B", "C" };

ICollection ListC = listA;

ListC = listB;