将通用数据存储在非通用类中

eri*_*mck 0 c# generics

我有一个 DataGridView,我想用它来存储通用数据。我想在 DataGridView 类中保留一个类型化数据列表,以便可以在内部处理所有类型等。但是我不想在 DataGridView 上设置类型,因为在调用 InitializeData 方法之前我不知道数据类型。

public class MyDataGridView : DataGridView {
    private List<T> m_data;
    public InitializeData<T>(List<T> data) {
       m_data = data;
    }
    ... internal events to know when the datagrid wants to sort ...
    m_data.Sort<T>(...)
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,如何?

Jon*_*eet 5

如果您在调用 之前不知道类型InitializeData,那么该类型显然不能是对象的编译时部分。

当您致电时,您是否了解有关排序的所有信息InitializeData<T>?如果是这样,你如何做这样的事情:

private IList m_data;
private Action m_sorter;

public InitializeData<T>(List<T> data)
{
    m_data = data;
    // This captures the data variable. You'll need to
    // do something different if that's not good enough
    m_sorter = () => data.Sort();
}
Run Code Online (Sandbox Code Playgroud)

然后当您稍后需要排序时,您可以调用m_sorter().

如果您可能对不同的事物进行排序,则可能会将其从ActiontoAction<string>或任何您需要能够排序的内容更改。