- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
受 Max()/Min() 中的 Javascript 变量参数和函数式语言中的列表理解的启发,我尝试使用通用扩展方法在 VB.NET 中获得相同的结果类型,给定 IEnumerable(of T) 作为结果类型。这适用于字符串除外。为什么?这些扩展方法可能被认为是一个坏主意。为什么这是一个坏主意的任何有力理由。
Option Explicit On
Option Strict On
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim xs As IEnumerable(Of Integer) = 1.Concat(2, 3, 4)
Dim ys As IEnumerable(Of Double) = 1.0.Concat(2.0, 3.0, 4.0)
Dim zs As IEnumerable(Of String) = Concat("1", "2", "3", "4") 'silly but works, I would use a stringbuilder
'Dim zs2 As IEnumerable(Of String) = "1".Concat("2", "3", "4") ' does not work why?
'Gives:
'String' cannot be converted to 'System.Collections.Generic.IEnumerable(Of String)'
'because() 'Char' is not derived from 'String', as required for the 'Out' generic parameter 'T' in 'Interface IEnumerable(Of Out T)'.
'C:\Users\kruse\Documents\Visual Studio 10\Projects\VarArgsExperiment\VarArgsExperiment\Module1.vb 12 45 VarArgsExperiment
Console.ReadLine()
End Sub
<Extension()> _
Function Concat(Of T)(ByVal xs As IEnumerable(Of T), ByVal ParamArray params As T()) As IEnumerable(Of T)
Dim ys As IEnumerable(Of T) = params.AsEnumerable()
Return xs.Concat(ys)
End Function
<Extension()> _
Function Concat(Of T)(ByVal x As T, ByVal ParamArray params As T()) As IEnumerable(Of T)
Dim xs As New List(Of T)
xs.Add(x)
Dim ys As IEnumerable(Of T) = params.AsEnumerable
Return xs.Concat(ys)
End Function
End Module
...为了简短起见,截取了模块的其余部分。 Als 为 Add、Cast 和 Apply for Action 对象编写了一些方法。
最佳答案
一个字符串是一个IEnumerable<char>
,并且字符串和字符之间没有关系。你可以把它想象成一个维度的问题,一个字符串通常可以被认为是一个char的数组。 char[] 不等于 char,永远也不会。 System.String 还实现了一个 Concat 方法,它可能会扰乱您的类型签名,因此您可能需要小心处理。
关于.net - Paramarrays 的通用 Concat 扩展方法不适用于 IEnumerable(of String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581938/
是否可以将数组的所有元素传递给 ParamArray? 例如,我想将一个 ParamArray 传递给另一个 ParamArray: Sub test() p1 "test", "banane
我使用 ParamArray 打开多个文件。 如何将工作簿分配给数组以单独访问它们?例如,获取每个工作簿的最后一行。 错误是 subscript out of range Sub main() Ca
如果我想通过数组为 ParamArray arglist 传递多个值,我该怎么做?从我目前阅读的内容来看,在 VBA 上,我似乎需要明确列出我想要传递的值。但是,如果可能有不同数量的值要传递,所以我事
我想创建一个几乎与 SumIfs 完全相同的函数,但我很难弄清楚如何处理 ParamArray 部分。我正在寻找一种解决方案,它允许与 sum ifs 相同的 Range1,Criteria1,Ran
我有一个像这样暴露给 COM 的类库: Public Class SomeClass Public Const ClassId As String = "GUID1" Public
在 this question 的上下文中被发现这看似 不一致的行为可以在 F#2.0 和 F#3.0 RC 中重现如下: type Heterogeneous = static member
我曾经拥有的: Public Sub Subscribe(channel As ChannelType) Public Sub Subscribe(channels As IEnumerable(Of
我想设计一个接受任意数量的 bool 条件并将它们添加到 IF 语句中的 Function 或 Sub。我想象的代码是这样的: Function comp (ParamArray list() As
我正在编写一个函数来在工作簿的所有工作表上运行一些宏,排除的工作表列表除外。我将排除工作表的列表作为 ParamArray 传递,但在对照 ParamArray 中的列表检查当前工作表时遇到问题。 P
我想知道是否可以在方法中将列表传递给 ParamArray 的参数?对于前。 dt = ws.getTable("baseDivision.code:1", "countryCode:CA",
我正在尝试编写一个函数来计算一个邮政编码到另一个邮政编码的最小距离。该函数应获取一个邮政编码的经度和纬度,然后是一个包含所有邮政编码的经度和纬度信息的二维数组。这是我写的函数: Public Func
我正在尝试构建一个 UDF,它将接受 ParamArray,该 ParamArray 将接受一个单元格、一系列单元格和/或直接值。然后我需要循环遍历 ParamArray 以获取传递的所有值,但是当我
我想在我的函数中包含一个 ParamArray,但到目前为止我的努力失败了。 假设我想构建一个函数来计算离散分布的平均值。 该函数具有以下形式: Function Dist_Discrete(X1,
最终编辑:它确实似乎是一个编译器错误 - 请参阅已接受的答案。 在 Excel 2007 中使用 VBA,我在“Class1”中有以下代码: Option Explicit Public Functi
当使用ParamArray并通过它传递数组元素时,我注意到VBA中有一个奇怪的地方。在某些情况下,到达函数的不是数组元素的值,而是 var 指针。 (Excel 2016,32 位)。 经过一番苦苦挣
我用过 ParamArray多年来,我想接受可变数量的参数。一个很好的例子是这个 MinVal 函数: Function MinVal(ParamArray Values() As Variant)
一些预定义的方法包含 ParamArray在他们的签名中。 但是,委托(delegate)不能在其签名中包含 ParamArray。 问题:假设您希望为需要 ParamArray 的特定方法创建委托(
受 Max()/Min() 中的 Javascript 变量参数和函数式语言中的列表理解的启发,我尝试使用通用扩展方法在 VB.NET 中获得相同的结果类型,给定 IEnumerable(of T)
在 F# 中,如何柯里化(Currying)一个接受可变数量参数的函数? 我有这样的代码...(日志函数只是一个示例,具体实现并不重要) let log (msg : string) = pr
我是一名优秀的程序员,十分优秀!