0

我想将类型参数传递给我的 *.xaml.cs 文件。C# 代码将如下所示:

public partial class Filter<T> : Window where T : IFilterableType
{
    private readonly IEnumerable<T> _rows;
    public Filter(IEnumerable<T> rows)
    {
        this._rows = rows;
    }
}

由于这是一个部分类,并且由于 Visual Studio 生成了该类的另一部分,我担心<T>当 Visual Studio 重新生成部分类的另一部分时,我的类型参数将被删除。到目前为止,在我的测试中,这还没有发生,但我想确定一下。

我可以像这样将类型参数传递给 *.xaml.cs 文件吗?

如果没有,我的 *.xaml.cs 类是否有其他方法可以拥有一些泛型类型的私有列表?我会尝试类似下面的内容,但这当然不会编译。

public partial class Filter : Window
{
    private IEnumerable<T> _rows;
    public Filter() { }

    public void LoadList(IEnumerable<T> rows) where T : IFilterableType
    {
        this._rows = rows;
    }
}
4

2 回答 2

0

不幸的是,您请求的选项在 XAML 中都不可能

于 2013-04-23T18:43:45.163 回答
0

这是另一种选择。我已经让它工作了,但它肯定是丑陋的代码。我使用一个简单的object变量来保存通用列表。我使用具有约束类型参数的方法来确保我正在使用IFilterableType接口。我还检查了我的DisplayList方法中的类型,以确保我使用的是正确的IFilterableType.

如果我this.DisplayList使用 FilterB 而不是 FilterA 调用,我会得到一个异常。这是我能想到的最好的解决方案。

public partial class Filter : Window
{
    public Filter()
    {
        List<FilterA> listA = new List<FilterA>();
        this.SetList<FilterA>(listA);
        this.DisplayList<FilterA>();
    }

    public interface IFilterableType { string Name { get; } }
    public class FilterA : IFilterableType { public string Name { get { return "A"; } } }
    public class FilterB : IFilterableType { public string Name { get { return "B"; } } }


    private object _myList;
    private Type _type;

    public void SetList<T>(List<T> list) where T : IFilterableType
    {
        this._myList = list;
        this._type = typeof(T);
    }

    public void DisplayList<T>() where T : IFilterableType
    {
        if (this._myList is List<T>)
            this.DataContext = (List<T>)this._myList;
        else
            throw new ArgumentException();
    }
}
于 2013-04-23T19:29:02.100 回答