C# - 泛型方法与非泛型方法

2023-11-21

我对为什么/何时想要使用泛型方法感到有点困惑,因为非泛型方法可以访问其包含类的泛型成员并无论如何都可以传递泛型参数。

因此,使用一个可能没有抓住重点的固定示例(但强调了我问这个问题的原因),我为什么要这样做:

public class SomeGeneric<T>
{
    public T Swap<T>(ref T a, ref T b)
    {
        T tmp = a;
        a = b;
        b = tmp;
    }
}

over

public class SomeGeneric<T>
{
    public T Swap(ref T a, ref T b)
    {
        T tmp = a;
        a = b;
        b = tmp;
    }
}

this?

或者,实际上,为什么我要使用通用方法at all?


您通常会在非泛型类型中使用泛型方法。

例如,看看Enumerable class。它定义了大多数 LINQ 功能的通用扩展方法,但它本身不是通用的。

您可能还需要泛型类型中的泛型方法,但前提是该泛型方法使用了不同的泛型类型说明符。

这使您可以编写如下内容:

 class Foo<T> where T : IConvertible, IComparable<T>
 {
      int CompareTo<U>(U other) where U : IConvertible
      {
           // Convert to this
           T otherConverted = Convert.ChangeType(other, typeof(T));
           return this.CompareTo(otherConverted);
      }
 }

(当然,这有点做作,但是可以正确编译并工作Foo<int>与一个相比double, etc)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 泛型方法与非泛型方法 的相关文章

  • 我如何使用 cout << myclass

    myclass是我写的一个C 类 当我写的时候 myclass x cout lt lt x 我该如何输出10 or 20 2 就像一个integer or a float value 通常通过重载operator lt lt 对于你的班级
  • QTableView 并双击一个单元格

    我正在开发测试用例编辑器 该编辑器包含 USART 传输和接收数据包格式 编辑器是一个表格视图 发送和接收数据包的长度为八个字节 例如 0x01 0x02 0x03 0x08 它在我的第五和第六栏中 现在 我希望此列中的单元格为只读 但是当
  • OpenCV 旋转图像而不裁剪澄清

    我想扩展这个主题 参考用户 Lars Schillingmann 给出的这个 SO 问题和接受的答案 在 C 中的 OpenCV 中旋转图像而不裁剪 https stackoverflow com questions 22041699 ro
  • 关于我的编译器中缺少 stdafx.h(Windows 上的 mingw32)

    我有一个简单的问题 我注意到我的编译器中没有 stdafx h Windows 上的 mingw32 我应该拥有它吗 或者也许有办法绕过它 谢谢阅读 编辑 好的 这是我取出 stdafx h 的所有包含内容后的当前构建日志 http pas
  • 与 Visual Studio 2010 的静态 libpng 链接

    我正在尝试向我的应用程序添加 PNG 支持 因此我想包含 libpng 我知道它需要 zlib 因此我也下载了它 我进入 png 文件夹 projects vstudio 然后打开解决方案 我编译了它 一切顺利 我将其中的一些标头添加到我的
  • opencv如何使用鼠标事件不规则地选择图像区域? c/c++ [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 最近在学习opencv 有没有办法使用鼠标事件选择图像区域 我已经尝试过三角形的了 如果我想选择特定区域而不是三角形怎么办 谢谢你 我对此进
  • 构造函数定义和声明不匹配

    我有以下 C 代码 其中声明中构造函数的参数与构造函数的定义具有不同的常量性 testClass hpp class testClass public testClass const int x testClass cpp testClas
  • 如何doxygen注释Qt属性?

    我想将 Doxygen 注释附加到我的 Q PROPERTY 例如 song h class Song public QObject Q OBJECT private Q PROPERTY QString title READ title
  • C - 具有可变数量参数和命令行参数的函数

    我需要排序n按字典顺序排列的作为参数数量可变的函数的参数的字符串数量 在main函数中 字符串被读取为命令行参数 这是我的代码 include
  • 如何正确绑定和更新 Xamarin.Forms ListView?

    使用 MVVM 模式 我有一个模型 ViewModel 和视图 其中包含一个 ListView ListView 绑定到 ViewModel 的成员 该成员是 Model 类的 ObservableCollection 我可以使初始显示的绑
  • 用户注销速度非常快

    我正在使用 ASP NET 身份成员身份 这是 Startup Auth cs 代码 app CreatePerOwinContext EFDbContext Create app CreatePerOwinContext
  • 如何使用 Dapper 从 .NET 7 执行 Postgresql 函数,而不列出所有参数的数据类型

    我正在尝试将我的 NET 5 Web API 代码传输到 NET 7 我有一个名为的单例服务DataManager它实现了接口IDataManager 其中一项功能是Execute还有其他 C 函数 称为 Get GerMany 以及 In
  • Linq 选择行,其中日期在当月

    我需要获取当月的数据 一直无法找到有效的解决方案 这是我的代码 它为我提供了所需的数据 但我获取的是整整一个月前的数据 而不是当前月份的数据 我选择了两次日期 限制 row gt DateTime Today Addmonths 1 有任何
  • 在 C# 中创建我的对称密钥

    一直在审查一些对称加密方法 我看到了很多在类中硬编码私有静态变量的示例 通常类似于 string key THISISYOURENCRYPTIONKEY 然后在更远的地方 代码使用它来加密 解密 抛开正确的实现 算法 策略以及存储它的位置
  • static_assert 有什么作用,你会用它做什么?

    你能举个例子吗static assert C 11 会优雅地解决手头的问题吗 我熟悉运行时assert 我应该选择什么时候static assert 超过常规assert 另外 在boost有一种东西叫做BOOST STATIC ASSER
  • 使用boost asio的线程池

    我正在尝试使用 boost asio 创建一个有限的线程池类 但我陷入了困境 有人可以帮助我吗 唯一的问题是我应该减少计数器的地方 代码无法按预期工作 问题是我不知道我的线程何时完成执行以及我如何知道它已返回池 include
  • 我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

    我们有一个可自定义颜色的应用程序 这使得列表视图中所选项目的橙色 Android 默认值有时看起来很糟糕 我们想要更改列表视图所选项目的颜色 我知道如何在我们页面的后台代码 xaml cs 中执行此操作 并且我知道您可以在 styles x
  • 如何使用 C# 和 IBM Watson SDK 将实时音频流立即发送到 IBM Watson Speech-To-Text,而不在本地保存音频文件?

    我需要使用 IBM Watson SDK 使用麦克风录制音频 并使用 C 将其发送到 IBM Watson 语音转文本 我可以通过在本地保存音频文件然后使用发送它来实现此功能NAudio图书馆 但我的要求是使用流模式将实时音频发送到 IBM
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正
  • 为什么编译器将“char”匹配“int”而不是“short”?

    我有一个小程序 include

随机推荐

  • 如何更改 R 中矩阵和数据框的暗名称

    假设我创建了以下矩阵 gt x lt matrix 1 20000 nrow 100 gt x 1 10 1 10 1 2 3 4 5 6 7 8 9 10 1 1 101 201 301 401 501 601 701 801 901 2
  • 可变长度数组的原型

    我正在尝试编写一个函数 该函数采用 c 中可变大小的数组 void sort int s int e int arr 它表示对于可变长度数组 需要在函数声明中对其进行限制 这意味着什么 我使用 xcode 4 0 和 LLVM 编译器 2
  • MySQL 如何创建这个子查询?

    我有以下表格 餐桌农场 FARM ID Stock ID FARM TITLE Size FARM VALUE 2 1 AgriZone M 202 3 1 Cow Mill L 11 4
  • 在 Django 中,我如何模仿通过管理员为我自己的模型添加用户的两步方法?

    我有一个模型 我想制作一个自定义管理 Change form 来模仿库存 Django 管理界面的添加用户功能的行为 也就是说 我想要一个两步操作 用户首先仅输入设备 ID 然后进入可以在设备上输入信息的页面 类似于您首先输入用户的用户名和
  • NSURLSession 请求和响应

    为了理解如何使用 Objective C 中的 NSURLSession 发出 GET 请求 我想要一个例子 并且 如何获得响应 GET NSMutableURLRequest urlRequest NSMutableURLRequest
  • Ember CLI / 浏览器刷新 / 生产 / 404

    我使用 Ember CLI 0 1 15 和 emberjs 开发了我的 web 应用程序 1 8 1 我使用以下命令构建了应用程序 ember build environment production 然后我从项目的 dist 文件夹下生
  • Django 注册标签库不起作用

    我尝试在 django 中注册我的自定义模板标签库 但不幸的是它不起作用 我想创建一个自定义包含标签并按照以下说明进行操作 https docs djangoproject com en 1 11 howto custom template
  • 如何将全局变量传递给 PHP 中的类?

    如何将全局变量传递给我想要使用的类 而不在类的每个方法中将它们声明为 GLOBAL 例子 admin admin area if POST login user new Administrator user gt auth pass use
  • 无法将值类型数组转换为 params object[]

    如果 C 可以将 int 转换为对象 为什么不能将 int 转换为 object 简单程序示例 void Main var a new String 0 1 var b new int 0 1 AssertMoreThan1 a No Ex
  • 是否有支持 PL/SQL 和 Java API 的嵌入式 DB?

    我正在寻找带有 Java API 的嵌入式数据库用于测试目的 我还需要 pl sql 支持 因为我们在生产中使用 oracle 并且迁移是用 pl sql 编写的 我想测试我的 DAO 对象 并且需要在使用迁移脚本进行单元测试的过程中在内存
  • Java编译器:两个具有相同名称和不同签名的方法如何匹配方法调用?

    我这门课叫Container public class Container private final Map
  • 无限循环heisenbug:如果我添加打印输出,它就会退出

    这是我的源代码 include
  • 如何在Excel的vba中初始化多维数组变量

    The 微软网站建议以下代码应该有效 Dim numbers 1 2 3 4 5 6 但是 当我尝试在 Excel VBA 模块中使用它时 出现编译错误 以下内容适用于一维数组 A Array 1 2 3 4 5 但是我还没有找到一种方法对
  • 在 Service Fabric 集群中存储大量状态

    我有一个场景 我们需要存储 x 100 GB 的数据 一般来说 数据是服务结构集群本身中参与者 良好分区 仅由特定参与者使用 持久状态的良好候选者 对于这种规模的数据 是否建议使用服务结构持久状态存储 我们的计算负载将相当低 因此仅仅为了存
  • 如何在 Angular2 中处理多个 queryParams

    我正在尝试在新的 Angular2 应用程序中实现过滤机制 这将允许我过滤数组中的条目列表 这些条目可能有大约 20 个可以过滤的属性 到目前为止 我已经在一个组件中创建了一个过滤器列表 然后创建了一个作为子组件路由到的列表组件 然后我计划
  • 接受用户输入在 Django 中创建用户

    我想使用用户输入在 Django 中创建 添加新用户到我的应用程序 我使用 django 提供的默认登录 我正在尝试将用户添加到默认登录 中的例子https docs djangoproject com en dev topics auth
  • Java 包自省 [重复]

    这个问题在这里已经有答案了 如何获取包中的所有类 你不能 类可以通过许多不同的类加载器进入 包括远程类加载器
  • Chrome 在设置 a:visited css 属性时是否有问题?

    我无法设置背景颜色 visited超链接到不同的背景颜色 这是 Google Chrome 的已知问题吗 我见过有人对背景图像提出类似的问题 设置颜色属性似乎工作正常 这是我使用的代码 a visited background color
  • 类继承不明确

    include
  • C# - 泛型方法与非泛型方法

    我对为什么 何时想要使用泛型方法感到有点困惑 因为非泛型方法可以访问其包含类的泛型成员并无论如何都可以传递泛型参数 因此 使用一个可能没有抓住重点的固定示例 但强调了我问这个问题的原因 我为什么要这样做 public class SomeG