C# 泛型类型约束类可能不是

2023-12-03

我想排除某些类型在泛型类中使用。我知道如何进行约束以确保泛型类型是某种(接口)类型。但我似乎不知道如何exclude(多种)类型。

例如:我想要一个泛型类来排除 int 和 uint(但不排除 DateTime,因此并非所有基元都可以被排除)。

我不能做这样的事情:

public class SomeWhereTest2<T> where T : !System.Int32 
{ 
}

有人可以帮我解决如何一次排除多种类型吗?


我创建了一个特殊的类,它的作用类似于字典,也是一个带有索引的 FiFo 集合,其中 0 是最新值,1 是上一个值,等等(public class FiFoDictionary<K, V>: IDictionary<K, V>,它使用OrderedDictionary作为内部字典。)

但由于索引是通过int,当字典的键是int。因为这样你就得到了链接到键的值,而不是索引。或者有什么方法可以强制使用索引而不是键OrderedDictionary?


鉴于评论中的解释,为什么你认为你需要这个:不, 你不需要排除int来自泛型类型。

当类中的重载方法(仅参数类型不同的方法)在泛型类中使用时,则已经决定调用哪个方法,而泛型类独立于具体类型进行编译,然后在以后使用在。

Example:

class Test<T>
{
    public void Trigger(T test)
    {
        // Will always call Internal(object) and never call Internal(int) even when T is int.
        Internal(test);
    }

    private void Internal(int test)
    {
        MessageBox.Show("Triggered int");
    }

    private void Internal(object test)
    {
        MessageBox.Show("Triggered object");
    }
}

private void buttonTest_Click(object sender, EventArgs e)
{
    Test<int> test = new Test<int>();
    test.Trigger(42);
}

输出是

“触发对象”

即使当T is int,超载的Internal方法需要一个int从未被调用,因为该决定Trigger称为Internal期望的方法object已经为整个泛型类制作了,与所使用的具体类型无关。


当您使用OrderedDictionary内部。myOrderedDictionary[x] where x是一种泛型类型将始终使用按键访问条目的索引属性,而不是按顺序访问条目的索引属性,因为这一决定是基于泛型类型的已知约束做出的,与稍后使用的具体类型无关。

class TestDictionary<TKey, TValue> 
{
    OrderedDictionary orderedDictionary = new OrderedDictionary();

    public void Add(TKey key, TValue value)
    {
        orderedDictionary.Add(key, value);
    }

    public TValue GetByIndex(int index)
    {
        return (TValue)orderedDictionary[index];
    }

    public TValue GetByKey(TKey key)
    {
        return (TValue)orderedDictionary[key];
    }
}

private void buttonTest_Click(object sender, EventArgs e)
{
    TestDictionary<int, string> test = new TestDictionary<int, string>();

    test.Add(42, "Test");

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

C# 泛型类型约束类可能不是 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • SQL Server 2008 中使用动态列的交叉表查询

    我在 SQL Server 中使用交叉表查询时遇到问题 希望有人能提供帮助 我有下表 Student ID Name Course Course Level 1 John English E2 1 John Mathns E3 1 John
  • 如何在shell脚本中使用goto语句[重复]

    这个问题在这里已经有答案了 我是 shell 脚本的初学者 我不知道如何使用 goto 语句 我正在使用以下代码 start echo Main Menu echo 1 for Copy echo 2 for exit read NUM c
  • HTML 画布制作模糊形状

    我想使用 HTML 制作简单的形状 但形状需要很大 并且画布处于全屏状态 例子 http jsfiddle net xLgg43s9 1 embedded result Code
  • 防止 Azure TableEntity 属性在 MVC 4 WebAPI 中序列化

    所以我有一个模型Subscription它继承自AzureTableEntity在 WebApi Get 方法中使用的类如下 HttpGet public IEnumerable
  • java中管道简单分割

    在将 split 与管道一起使用时遇到问题 但与其他字符一起使用时效果很好 我做错了什么 请帮助我 String s H PONumber1 1 1 String arr s split for int i 0 i
  • 如何将一组标准参数传递给 async.js 系列中的每个函数?

    给定以下 node js 模块 我将如何调用数组中的函数orderedListOfFunctions通过每一个response多变的 var async require async var one require one js var tw
  • 转换 Base64 GZipped 字符串 Objective-c 或 Swift

    我从网络服务收到一个字符串 如下所示 CAAAAB LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvv
  • IE中div宽度问题

    在发布之前 我仔细阅读了几个与此类似的问题 但没有找到适合我的解决方案 我的网站中有一个页面不适合我用于其他每个页面的模板 因为为该页面生成的信息表太宽了 为了使表格显示我使用overflow x visible 结果正是我在除 IE 之外
  • 如何在android中获取epub书籍的图像

    我试图将 epub 书读入我的 android 应用程序 并成功地将文本输入到我的应用程序中 但无法加载 epub 书的图像 实际上 当我们使用 epub 库阅读 epub 书时会发生什么 如果它存储的内容比 epub 书的图像所在的位置要
  • ANSI 转义代码在 python 解释器上不起作用 [重复]

    这个问题在这里已经有答案了 ANSI 代码无法在我的 python 解释器上运行 我想为这个项目的一些印刷品上色 我查找了如何为打印字符着色并找到了 ANSI 转义码 因此我在解释器上尝试了它 但它不起作用 例如 print 033 32m
  • Chrome 扩展程序 - 查看扩展程序选项卡是否打开

    我已经设置了当我单击 extn 图标时 我的 extnindex html opens 如果我第二次单击该图标 我不希望它打开第二个选项卡 我希望它能够聚焦已打开的选项卡 如果它已打开 问题在于if it s open部分 理想情况下 我不
  • TaskFactory.FromAsync 与 BeginGetRequestStream/EndGetRequestStream 挂起

    我有一个这样的方法 在声明时挂起responseObject使用 Task Factory FromAsync private async Task
  • 在 JavaEE 应用程序中使用 Jackson 作为 JAXB-JSON 处理器

    我看过很多关于此的文章和问题 但我就是不明白它的作用 我的目标是在 JavaEE 应用程序中使用 Jackson 作为 JSON 处理器 到目前为止我有什么 pom xml 要么这个
  • PowerShell 编码命令失败

    我试图使用 Powershell 的 EncodedCommand 标志弹出一个简单的消息框 但它一直失败 我在过去的几个小时里尝试过谷歌搜索 但似乎无法正常工作 它几乎看起来像一个编码错误 但我使用的是常规 UTF 8 和标准 ASCII
  • 执行非查询过程不工作asp.net core

    我想执行一个存储过程 该过程返回三个值 电子邮件 姓名 公司 ID 并获取一个参数 公司 ID 但它不起作用 我创建了一个具有这些属性的类和一个返回数据的存储过程 由它显示DatabaseFacade error 我的代码是 List
  • 如何计算图像的对比度?

    假设我有一个opencv BGR image img 如何计算该图像的对比度 对比度的一种定义是均方根对比度 可以按下式计算 首先 改造BGR image img到灰度 img grey cv2 cvtColor img cv2 COLOR
  • 如何水平居中对齐 div 内的文本?

    这可能是个愚蠢的问题 但我不知道如何得到这个 编辑 我只想将文本水平居中而不是图像 并且图像必须保持文本的基线 div img style width 30px height 60px display inline src http pla
  • 如何在字符级别对句子进行one-hot编码?

    我想将一个句子转换为一个 one hot 向量数组 这些向量将是字母表的独热表示 它看起来像下面这样 hello h 7 e 4 l 11 o 14 会成为 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 如何将 SAX 与 Nokogiri 一起使用?

    我想解析一个非常大的文件 240Mb 并且必须使用 SAX 以避免将文件加载到内存中 我的 XML 看起来像
  • C# 泛型类型约束类可能不是

    我想排除某些类型在泛型类中使用 我知道如何进行约束以确保泛型类型是某种 接口 类型 但我似乎不知道如何exclude 多种 类型 例如 我想要一个泛型类来排除 int 和 uint 但不排除 DateTime 因此并非所有基元都可以被排除