c# - 通用方法与强制转换

标签 c# winforms generics casting

<分区>

我有一个按名称搜索 winform 控件的方法。我的第一个方法是那样做

private Control SearchControlByName(Control parent, string name){recursive search...}

调用方法看起来像

Label temp = (Label)SearchControlByName(panel1, "label4");

然后我想到最好用这样的通用方法来做

private T SearchControlByName<T>(Control parent, string name) where T : Control {recursive search}

像打电话一样

Label temp = SearchControlByName<Label>(panel1, "label4");

现在我不确定哪种方法更好。调用方法后,泛型方法与强制转换的优点/缺点是什么? 在通用方法中,我还必须像这样转换结果

return (T)result

最佳答案

我觉得没有什么缺点。

由于至少有两个优点(见下文),我会使用通用版本。

  • 它更漂亮(不需要那个类型转换)。
  • 你可以使用 OfType<T> Control.Controls 在实现内部(你的递归搜索)所以你不必担心返回 Label当这个人想要 PictureBox .但是请记住,您只能在底层执行此操作,否则您当然不会遍历所有元素。

关于c# - 通用方法与强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57658026/

相关文章:

c++ - 嵌套通用容器迭代 C++

generics - 没有泛型,静态类型语言如何处理?

c# - 获取显示受影响的方法(名称)的代码文件版本差异

c# - 具有方法重载的派生类型

c# - twainlib 如何在 ShowUI = False 时设置扫描属性

c# - 使用现有列将行添加到 datagridview

c# - 无法向窗体添加控件

Java 将类型作为参数传递给需要子类型的函数

c# - 构建支持我自己的自定义事件的 EventTriggerBehavior

c# - 我可以判断另一个进程是否正在创建文件吗?