使用“灵活”类型参数与泛型类型进行模式匹配

2024-04-01

match value with
| :? list<#SomeType> as l -> l //Is it possible to match any list of a type derived from SomeType?
| _ -> failwith "doesn't match"

正如已经指出的,没有办法直接做到这一点(模式匹配只能绑定值,但不能绑定新类型变量)。除了(更一般的)解决方法之外kvb您可以利用所有集合都实现非泛型的事实IEnumerable,所以你可以检查这种类型:

match box value with 
| :? System.Collections.IEnumerable as l when 
     // assumes that the actual type of 'l' is 'List<T>' or some other type
     // with single generic type parameter (this is not fully correct, because
     // it could be other type too, but we can ignore this for now)
     typedefof<SomeType>.IsAssignableFrom
       (value.GetType().GetGenericArguments().[0]) -> 
   l |> Seq.cast<SomeType>
| _ -> failwith "doesn't match"

该代码测试该值是否是非泛型IEnumerable以及类型参数是否是子类型SomeType。在这种情况下,我们得到了一些派生类型的列表,因此我们可以将其转换为一系列SomeType值(这与使用派生类型的值列表略有不同,但对于实际目的来说应该不重要)。

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

使用“灵活”类型参数与泛型类型进行模式匹配 的相关文章

  • 正则表达式 - 线上任何地方的负向后看

    仅当同一行中前面没有特定字符时 如何匹配模式 我有以下正则表达式代码 pattern lt s lt replacement span 1 span code Regex Replace code pattern replacement 我
  • 没有带有常量“模板参数”的 F# 泛型?

    我突然想到 F 泛型似乎不接受常量值作为 模板参数 假设有人想创建一种类型RangedInt这样 它的行为类似于 int 但保证只包含整数值的子范围 一种可能的方法是建立受歧视的工会 类似于 type RangedInt Valid of
  • 使用 F# 进行循环与递归

    这里的示例代码解决了一个项目欧拉问题 从数字 1 开始 按顺时针方向向右移动 方向 5 x 5 螺旋形成如下 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
  • “Alternative”中的模式匹配

    我有一个函数 它的参数进行模式匹配以生成计算StateT Maybe 可以这么说 此计算在运行时可能会失败 在这种情况下 我希望当前的模式匹配分支失败 我非常怀疑是否有可能有类似的东西 compute Int gt StateT Maybe
  • 如何在 F# 列表和 F# 元组之间进行转换?

    有没有办法在 F List 和 F Tuple 之间进行转换 例如 1 2 3 gt 1 2 3 1 2 3 4 gt 1 2 3 4 我需要两个函数来做到这一点 let listToTuple list let tupleToList t
  • F#、FParsec 和递归调用流解析器(第二次)

    感谢您的回复我的第一篇文章 https stackoverflow com questions 26853718 f fparsec and calling a stream parser recursively and 我的第二篇文章 h
  • java中使用[:punct:]函数的正则表达式

    我在用 punct 替换 a 中特殊字符的函数 字符串例如 REPLACE REGEXP REPLACE 第 1 列 punct 作为输出 作为java中SQL字符串的一部分 但我想要特定的特殊字符 不被替换 你能建议最好的方法吗 Acc
  • ? LIKE(列 || '%')

    我可以有这样的条件吗 SELECT FROM table WHERE LIKE column 哪里的 是一个字符串参数值 例如 这些参数值 当列等于时应返回 true admin products admin products 1 admi
  • 如何判断 F# 函数是否是纯函数?

    假设我有这两个 F 函数 let sq x x x let tm DateTime Now 显然 sq 是纯的 因为它对于给定的输入总是返回相同的值 而 tm 是不纯的 因为每次调用它时都会返回不同的值 一般来说 有没有一种方法可以确定 F
  • 我在 Python 中查找重复循环的正则表达式模式有什么问题?

    我想匹配任何具有重复循环的字符串 就像这个数据一样 3333333333333333333333333333333333333333 1 digit cycle 3 1666666666666666666666666666666666666
  • 我缺少什么:可以使用多个参数进行函数组合吗?

    我了解 F 中函数组合的基础知识 例如所述here http blogs msdn com b chrsmith archive 2008 06 14 function composition aspx 不过 也许我错过了一些东西 这 gt
  • F# 2010 Seq.generate_using

    Visual Studio 2010 中的 Seq generate using 是否有替代 解决方法 FSharp PowerPack dll 不适用于 2010 AFAIK 很抱歉 2010 年的 PowerPack 尚未上市 我不记得
  • 如何在MVVM中实现appSettings

    我正在尝试摆脱我使用的警告appSettings在 WPF 项目中 应用程序配置
  • F# 获取随机数列表

    我正在尝试用随机数填充列表 但很难获得随机数部分 我现在打印出一个随机数 10 次 我想要的是打印出 10 个不同的随机数 let a new System Random Next 1 1000 let listOfSquares for
  • F# 对于 OO 或命令式来说缺少什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 该表达式的类型为 int,但此处与 unit 类型一起使用

    我试图在 F 中获得与此 vb net 代码完全相同的 非功能性的 Function FastPow ByVal num As Double ByVal exp As Integer As Double Dim res As Double
  • F# nameof 运算符不是一等函数

    我正在使用 F 4 7
  • Async.StartChild是否存在内存泄漏?

    当我运行以下测试 使用 F 2 0 构建 时 我得到 OutOfMemoryException 在我的系统上大约需要 5 分钟才能达到异常 如果它作为 x86 进程运行 则为 i7 920 6gb ram 但无论如何我们都可以在任务管理器中
  • 如何使用 FLinq 在 F# 中进行外连接?

    问题几乎说明了一切 我有一个如下形式的大 flinq 查询 for alias1 in table1 do for alias2 in table2 do if alias1 Id alias2 foreignId 使用这种形式 如何在这两
  • F# 中的数组初始化

    如何根据给定的记录类型在 F 中创建和初始化数组 假设我想创建一个包含 100 个 record1 记录的数组 e g type record1 value1 string value2 string let myArray Array i

随机推荐

  • 如何将十六进制字符串分配给 char[] 变量?

    假设我的十六进制字符串 hexStr aecf 如何将十六进制字符串值分配给unsigned char myChar 如下 谢谢 myChar 0 0xae myChar 1 0xcf 您可以按如下方式转换数据 char hexstr ae
  • 如何创建可以使用 rundll32.exe 运行而无需指定入口点的本机 C++ DLL

    我将如何创建一个可以使用 rundll32 exe 执行的本机 dll不指定入口点 例子 C gt rundll32 exe mydll dll 我在 Visual Studio 上创建了一个 DLL 项目 但我不知道在哪里放置我的代码 V
  • 对 15 个谜题状态进行哈希处理的有效方法的想法

    我正在通过蚁群优化实现一个 15 谜题求解器 并且正在考虑一种有效地将每个状态散列为数字的方法 因此我浪费了最少的字节 状态由 16 个数字的列表表示 从 0 到 15 0 是空洞 Like 1 2 3 4 5 6 7 8 9 10 11
  • Oracle 处理很长的 IN 运算符列表的效率如何

    我有以下查询 这是一个更复杂的查询的简化版本 SELECT FROM TPM TASK WHERE PROJECTID VERSIONID IN 3 1 24 1 4 1 在代码中我将构建它 PROJECTID VERSIONID 以编程方
  • 对 PictureBox 的透明控制

    在我的 C 表单中 我有一个标签 显示下载事件中的下载百分比 this lblprg Text overallpercent ToString 0 Label 控件的 BackColor 属性设置为透明 我希望它显示在 PictureBox
  • Haswell 微架构在性能中没有停滞周期后端

    我在 Haswell CPU Intel Core i7 4790 上安装了 perf 但 性能列表 不包括 stalled cycles frontend 或 stalled cycles backend 我检查了http www int
  • 用底部三角形制作div

    我一直在努力做白色形状与一个div http sircat net joomla sircat mies 2 png http sircat net joomla sircat mies 2 png 如何获得 div 底部的对角线形状 我有
  • 在 JSON.NET 中序列化/反序列化字节数组

    我有一个具有以下属性的简单类 JsonObject MemberSerialization OptIn public class Person JsonProperty PropertyName Photograph public byte
  • 纯Python XSLT 库

    有没有纯Python 的XSLT 库 在我需要支持的某些平台上安装 libxml2 libxslt 或任何类似的 C 库是一个问题 我确实只需要基本的 XSLT 支持 速度不是主要问题 不幸的是 目前还没有纯 python XSLT 处理器
  • 提供语言服务的问题

    我发现了两种在互联网上提供语言服务的方法 第一种方式 http msdn microsoft com fr fr library vstudio bb166498 28v vs 110 29 aspx涉及使用IOleComponentMan
  • 将 Android 应用程序连接到远程数据

    谢什谈论的信息有限 我正在尝试让我的 Android 应用程序连接到在线数据库以访问信息 有相当多的信息 包括地理标签 这些信息将映射到我的应用程序上 开发者网站有非常丰富的信息 您可以使用网络 如果可用 在您自己的基于 Web 的服务上存
  • 将 PDF 表单数据接收到 PHP 中

    所以我在网上寻找了几个小时 我认为这是一个非常简单的答案 但我似乎找不到它 我试图了解 PDF 表单数据提交的工作原理 我的目标是读取从我设置到 PHP 脚本中的 PDF 表单提交的表单数据 我希望我的 PHP 脚本能够解析表单数据并将其插
  • Django 管理错误“WSGIRequest”对象没有属性“用户”

    我正在练习 Django 当我尝试去http localhost admin http localhost admin 我收到以下错误 我已检查 settings py 并且 MIDDLEWARE CLASSES 确实存在 是否还有其他原因
  • Apache NiFi 用于将数据从 RDMBS 导入到 HDFS - 与 SQOOP 的性能比较

    我们正在探索 Apache NiFi 作为满足我们企业需求的通用数据摄取工具 一种典型的数据摄取要求是从 RDBMS 移动数据 系统到 HDFS 我能够使用 NiFi 提供的GenerateTableFetch 和 ExecuteSQL 处
  • 混洗两个 __m128i 的 64 位部分的最佳方法

    我有两个 m128is a and b 我想进行洗牌 以便高 64 位a落在低 64 位dst和低 64 位b落在上64dst i e dst 0 63 a 64 127 dst 64 127 b 0 63 相当于 m128i dst mm
  • 使用 SPI 接口初始化 microSD 卡

    我正在使用一个microSD http en wikipedia org wiki Secure Digital Physical size卡采用嵌入式设计 该卡使用 SPI 接口连接到微控制器 它适用于我以前使用过的所有卡 但现在我的新卡
  • 具有负载平衡的高负载服务器,使用 WCF 和 MSMQ

    目前我正在开发一个空间数据处理服务器 以下是要求 服务器必须能够每秒接收和处理大约 150 200 条小消息 GPS 修复 一些附加数据 它必须是可扩展的 例如在多台机器上运行并平衡负载本身 没有nlb 目前我已经测试了这种架构 传入消息服
  • HTML 预处理器?

    是否有一个 HTML 预处理器可以进行类似的简单页面处理服务器端包括 http en wikipedia org wiki Server Side Includes 但是生成一组静态 HTML 页面 我认为它们被称为预处理器 http ht
  • ng-focus 和 ng-blur 不适用于选择 DOM

    首先 我创建一个简单的示例来查看 ng focus 和 ng blur 是否在 select 上拖动 然后是我的实际代码 我找不到为什么第二个不起作用 div div
  • 使用“灵活”类型参数与泛型类型进行模式匹配

    match value with list lt SomeType gt as l gt l Is it possible to match any list of a type derived from SomeType gt failw