检查 C# 中泛型方法的类型参数

2024-05-02

是否可以在 C# 中执行类似的操作:

public void DoSomething<T>(T t)  
{
    if (T is MyClass)
    {
        MyClass mc = (MyClass)t 
        ...
    }
    else if (T is List<MyClass>)
    {
        List<MyClass> lmc = (List<MyClass>)t
        ...
    }
}

Yes:

if (typeof(T) == typeof(MyClass))
{
    MyClass mc = (MyClass)(object) t;
}
else if (typeof(T) == typeof(List<MyClass>))
{
    List<MyClass> lmc = (List<MyClass>)(object) t;
}

您需要通过强制转换为对象有点奇怪,但这就是泛型的工作方式 - 泛型类型的转换没有您想象的那么多。

当然,另一种选择是使用正常的执行时间检查:

MyClass mc = t as MyClass;
if (mc != null)
{
    // ...
}
else
{
    List<MyClass> lmc = t as List<MyClass>;
    if (lmc != null)
    {
        // ...
    }
}

这将与第一个代码块的行为不同,如果t当然是空的。

I would try然而,尽可能避免这种代码 - 有时可能是必要的,但通用方法的想法是能够编写generic对于任何类型都以相同方式工作的代码。

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

检查 C# 中泛型方法的类型参数 的相关文章

随机推荐

  • 升级到v1.5时jquery ajax出错

    我从 v1 4 4 升级到 v1 5 我想我已经发现了下面的问题 document ready function Get token on page load update csrf token 该函数看起来像这样 EDITED funct
  • Dynamics CRM:在帐户实体中添加多个地址

    I have a scenario where I need to add multiple Address to Account I am using Dynamics 365 online instance and my current
  • 使用 REST API 进行正确的会话管理

    我已经完成了 RESTful API 的设计 其中我使用作为参数发送的 API 令牌对每个请求进行身份验证 现在我想创建一个客户端界面 我想知道什么是管理每个客户端的会话的正确安全方法browser客户 我想过一个流程来保持服务器端无状态
  • 这是可插拔组件本地化的好解决方案吗?

    我问了一个question https stackoverflow com questions 1504363 how should i localise pluggable components以前只有一个答案 我现在已经花了一些时间来研
  • 比较元胞数组中的字符串

    我试图在单词列表中找到最常见的单词 到目前为止 这是我的代码 uniWords unique lower words for i 1 length words for j 1 length uniWords if uniWords j lo
  • 如何对 Django 视图进行单元测试?

    我想开始将单元测试集成到我的 Django 项目中 并且我发现对视图进行单元测试很棘手 因为 Django 使用函数实现视图的方式 例如 如果函数有 URL 则每个函数都是 Django 中的视图 页面 如何对 Django 视图进行单元测
  • 如何使用 hibernate JPA 2 以二进制形式存储 uuid

    我有一个关于通过休眠持久化 JPA2 在数据库中以二进制形式存储字符串uuid的问题 我现在正在使用这段代码 private UUID id Id Type type uuid char GeneratedValue generator s
  • 不小心删除了Android布局文件

    我不小心从我的 Android 项目中删除了一个布局文件 有什么办法可以拿回来吗 自从做完之后我就再也没碰过 而且我在其他地方没有该文件的副本 如果您的 bin 文件夹中有该 apk 那么您很幸运 使用apktool https code
  • 使用 ffmpeg 将视频与其自身连接,但相反

    我能够逆转 ffmpeg i input mp4 vf reverse output reversed mp4 我可以连接 ffmpeg i input mp4 i input mp4 filter complex 0 0 0 1 1 0
  • 如何以编程方式迭代所有 CMake 目标?

    有没有办法从顶层获取 CMake 项目的所有目标CMakeLists txt 即以编程方式迭代目标 我想要这样做的原因是将一些 XCode 特定设置应用于每个目标 if CMAKE GENERATOR MATCHES Xcode inclu
  • 受保护属性的通用 getter 和 setter

    考虑这个 TypeScript 类 它通过将实现分为超类和子类来提供类型检查的通用 getter 和 setter class ICompetence protected id number undefined protected name
  • 抓取网页时调用 javascript 函数

    我正在使用 python 抓取网页 该页面有
  • emacs 启动后更改 X11 窗口标题

    当我启动 emacs 时 我可以使用 title 选项来控制保存 emacs 应用程序的 x 窗口的标题 emacs从elisp启动后可以更改标题吗 M x set frame name NewName RET 和来自 elisp set
  • videoMinFrameDuration 已弃用

    当我将 Xcode 从 4 6 更新到 5 1 时 ios7 中不推荐使用 videoMinnFrameDuration void setFrameRate NSInteger frameRate frameRate frameRate i
  • Angular2 RC6 HttpModule手动注入

    我正在将一个项目从 angular2 RC4 迁移到 RC6 并且我有一个自定义表单验证器 需要Http 在迁移之前我使用了ReflectiveInjector与HTTP PROVIDERS 但是对于 RC6 这不再可能了 因为HTTP P
  • 通过电子邮件搜索将 Excel 2003 中的数据行复制并粘贴到不同的工作表

    在任何人发表任何言论之前 我已经浏览了几篇与此类似想法相关的帖子 采用不同的搜索条件 然后对其进行修改 但我无法让宏正常工作 这可能是由于我缺乏编程知识 我想做的就是 search的电子邮件地址工作表1如果找到 则将整行复制到下一个空闲行工
  • 如何将数据框随机分成三个具有给定行数的较小数据框

    使用 R 我想将一个数据帧随机拆分为三个较小的数据帧 第一个占总观测值的 80 第二个和第三个分别占总观测值的 15 和 5 三个数据框不能有任何重叠 你有什么建议吗 这是一个快速函数 可以根据您在 props 参数中指定的值的数量分成任意
  • iPhone应用程序NSNumber内存泄漏

    我遇到了内存泄漏 但我不知道它从哪里来以及如何修复它 在某些时候 我计算两个位置之间的距离 double calc self getDistance location to otherLocation NSNumber distance N
  • 如何使用Python的RotatingFileHandler

    我正在尝试进行测试运行logging模块的RotatingFileHandler https docs python org 3 library logging handlers html logging handlers Rotating
  • 检查 C# 中泛型方法的类型参数

    是否可以在 C 中执行类似的操作 public void DoSomething