gpt4 book ai didi

c# - 如何获取旧式集合中项目的类型?

转载 作者:行者123 更新时间:2023-12-02 17:20:10 25 4
gpt4 key购买 nike

我实际上想做的是编写一个函数,允许我更改 DataGridView 中的选择,我想编写一个函数并将其用于行和列。这是一个简单的示例,取消选择所有内容并选择新的行或列:

private void SelectNew<T>(T collection, int index) where T : IList
{
ClearSelection();
collection[index].Selected = true;
}

我的问题是这不起作用,因为无法派生 .Selected() 可用,因为这是非通用 IList。

使用

where T : IList<DataGridViewBand>

会很好,但由于 DataGridViewRowCollection(和 -Column-)只是从 IList 派生,所以这是行不通的。

在 C++ 中,我可能会使用特征习惯用法。有没有办法在 C# 中做到这一点,或者有更惯用的方法吗?

最佳答案

虽然理论上可以使用反射来做到这一点;因为您的明确目标只是处理行或列,所以最简单的选择就是为函数创建两个重载:

private void SelectNew(DataGridViewColumnCollection collection, int index)
{
ClearSelection();
collection[index].Selected = true;
}

private void SelectNew(DataGridViewRowCollection collection, int index)
{
ClearSelection();
collection[index].Selected = true;
}

如果您尝试使用反射来执行此操作,它会起作用,但速度会更慢,可读性较差,并且存在没有编译时保护的危险;人们将能够传递没有 Selected 属性的其他类型的列表,并且它会编译并在运行时失败。

关于c# - 如何获取旧式集合中项目的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17280397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com