标签: paramarray

将数组传递给ParamArray

是否可以将数组的所有元素传递给ParamArray?

例如,我想将ParamArray传递给另一个ParamArray:

Sub test()
    p1 "test", "banane", "birne"
End Sub

Sub p1(ParamArray keys() As Variant)
    p2 keys 'should be the same as: p2 "test", "banane", "birne"
End Sub

Sub p2(ParamArray keys() As Variant)
    Dim key As Variant
    For Each key In keys
        Debug.Print key 'Run-time error '13' Type mismatch (key is an array)
    Next key
End Sub
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ParamArray p2不包含元素keys,但它获取数组对象keys.因此,我必须检查,如果传递数组:

Sub test()
    p1 "test", "banane", "birne"
    p2 "test", "banane", "birne"
End Sub

Sub p1(ParamArray keys() As …
Run Code Online (Sandbox Code Playgroud)

parameters vba parameter-passing paramarray

15
推荐指数
3
解决办法
2万
查看次数

使用jQuery ajax/load提交数组参数

public ActionResult DoSomething(string[] arr, bool someBool, int someInt) { }

试图从jQuery调用上面的方法:

var test = [];
test.push('dog');
test.push('cat');

$container.load('MyController/DoSomething',
                { 'arr[]': test, 'someBool': true, 'someInt': 1 },
                function(response, status, xhr) {
                    // ...
                });
Run Code Online (Sandbox Code Playgroud)

数组参数为空,其他参数都很好.我究竟做错了什么?

Chrome开发人员工具会将提交的表单数据显示为

arr%5B%5D%5B%5D:dog
arr%5B%5D%5B%5D:cat
someBool:true
someInt:1
Run Code Online (Sandbox Code Playgroud)

不知道那里发生了什么,但看起来不对我

asp.net-mvc jquery load paramarray

14
推荐指数
1
解决办法
2万
查看次数

带有其他参数的C#HttpClient Post String数组

我正在编写一个C#api客户端,对于大多数发布请求,我使用FormUrlEncodedContent发布数据.

List<KeyValuePair<string, string>> keyValues = new List<KeyValuePair<string, string>>();

keyValues.Add(new KeyValuePair<string, string>("email", email));
keyValues.Add(new KeyValuePair<string, string>("password", password));

var content = new FormUrlEncodedContent(keyValues);
Run Code Online (Sandbox Code Playgroud)

但现在我需要将一个字符串数组作为一个参数发布.有些事情如下.

string[] arr2 = { "dir1", "dir2"};
Run Code Online (Sandbox Code Playgroud)

如何使用c#HttpClient将此数组与其他字符串参数一起发送.

c# post httpclient paramarray

6
推荐指数
1
解决办法
6758
查看次数

代表和ParamArray - 解决方案建议?

某些预定义方法在其签名中包含ParamArray.但是,代表在签名中不能包含ParamArray.

问题:假设您希望为需要ParamArray的特定方法创建委派机制.你会如何解决这个约束?

编辑:只是为了说清楚,假设你不能改变方法签名本身(预定义的方法,由一些第三方定义,无论是否微软).

EDIT2:这里真正的优点是保持语法糖,因为以下代码确实有效,但消除了糖:

Public Delegate Sub MyDelegate(ByVal myArgs() As Object)

Public Sub PredefinedSub(ByVal ParamArray myArgs() As Object)
    '...'
End Sub

Sub Test()
    Dim aDelegate As New MyDelegate(AddressOf PredefinedSub)
    aDelegate.Invoke(New Object() {1, 2, 3, 4})
End Sub
Run Code Online (Sandbox Code Playgroud)

EDIT3:事实证明,Skeet的解决方案也适用于创建包含ParamArray的事件和操作符.

vb.net delegates method-signature paramarray

6
推荐指数
1
解决办法
3455
查看次数

在F#中,你如何理解ParamArray函数(如sprintf)?

在F#中,你如何理解接受可变数量参数的函数?

我有这样的代码...(日志功能只是一个例子,确切的实现并不重要)

let log (msg : string) =
    printfn "%s" msg

log "Sample"
Run Code Online (Sandbox Code Playgroud)

它使用sprintf格式化的字符串在整个代码中调用,例如.

log (sprintf "Test %s took %d seconds" "foo" 2.345)
Run Code Online (Sandbox Code Playgroud)

我想在日志函数中讨论sprintf功能,看起来像......

logger "Test %s took %d seconds" "foo" 2.345
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西

let logger fmt ([<ParamArray>] args) =
    log (sprintf fmt args)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将ParamArray参数传递给sprintf调用.

这是如何在F#中完成的?

printf f# currying paramarray

6
推荐指数
2
解决办法
1298
查看次数

使用ParamArray,但至少需要一个参数

我曾经拥有的:

Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))
Run Code Online (Sandbox Code Playgroud)

第一个只调用第二个{channel}将其参数转换为数组.

我决定必须创建一个传递给方法的通道列表是很尴尬的,并选择将两个重载组合成一个需要a的方法ParamArray.

Public Sub Subscribe(ParamArray channels() As ChannelType)

'Usage
Subscribe(ChannelType.News)
Subscribe(ChannelType.News, ChannelType.Sports)
Subscribe() 'Oops... this is valid
Run Code Online (Sandbox Code Playgroud)

这里的"最佳实践"是什么?我喜欢灵活性,这ParamArray让我只是让人们传递内容,但它无法通过编译器错误反馈帮助开发人员"失败更快"...这意味着像这样的东西ArgumentException是不可能的,因为人们消费这个方法可能不会编写任何单元测试.一个选项是以下......

Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
Run Code Online (Sandbox Code Playgroud)

但我觉得这让我几乎回到原点,令人困惑,并要求我对这种方法的实施不那么直截了当.

vb.net parameters paramarray

5
推荐指数
2
解决办法
1万
查看次数

将 Variant 数组中的元素作为参数传递给 ParamArray

背景

\n

我正在创建一个名为 的 VBA 函数 (UDF) MyUDF(),它包装CallByName().

\n

我希望精确模仿 的签名和参数行为CallByName()。此外,MyUDF()必须将其Args()参数复制到模块化变量ArgsCopy\xe2\x80\x94 一个Variant数组 \xe2\x80\x94 ,然后将其元素MyUDF()作为进一步的参数传递给CallByName()传递给。

\n

不要问为什么 \xe2\x80\x94 这是一个很长的故事。

\n

参考

\n

CallByName()在 VBA 编辑器中显示如下

\n

2

\n

文档中是这样描述的:

\n
\n

句法

\n

CallByName (对象,过程名称,调用类型, [args()]_)

\n

CallByName函数语法具有以下命名参数

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n
部分描述
目的必需:变体对象)。将在其上执行函数的对象的名称。
进程名必需:变体 …

vba parameter-passing wrapper user-defined-functions paramarray

5
推荐指数
0
解决办法
476
查看次数

VBA用于排除字符串部分的函数

我的sub比较两个字符串列表并返回最接近的匹配.我发现sub会因为"the"和"facility"之类的常见词而被绊倒.我想编写一个函数,提供一个单词数组来排除和检查这些单词的每个字符串,如果找到则排除它们.

这是一个示例输入:

|aNames        |  bNames        | words to exclude
|thehillcrest  |oceanview health| the
|oceanview, the|hillCrest       | health
Run Code Online (Sandbox Code Playgroud)

预期产出:

|aResults     |bResuts
|hillcrest    |hillcrest
|oceanview    |oceanview
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有:

Dim ub as Integer
Dim excludeWords() As String

'First grab the words to be excluded
If sheet.Cells(2, 7).Value <> "" Then
  For y = 2 To sheet.Range("G:G").End(xlDown).Row
    ub = UBound(excludeWords) + 1             'I'm getting a subscript out of range error here..?
    ReDim Preserve excludeWords(0 To ub)
    excludeWords(ub) = sheet.Cells(y, 7).Value
  Next y
End If
Run Code Online (Sandbox Code Playgroud)

然后,我的比较函数,使用双循环,将比较A列中的每个字符串与B列.在比较之前,a和b列中的值将通过我们的函数,该函数将检查要排除的这些单词.可能没有要排除的单词,因此参数应该是可选的: …

string excel vba excel-vba paramarray

4
推荐指数
2
解决办法
2281
查看次数

有没有办法将ParamArray值作为byRef处理,以便可以更新?

听起来很简单,但它不起作用.在这个例子中,我想将3个字段的值设置为等于4.我可以做这样的事......

Dim str1 As String = "1"
Dim str2 As String = "2"
Dim str3 As String = "3"
Dim str4 As String = "4"

str2 = str1
str3 = str1
str4 = str1
Run Code Online (Sandbox Code Playgroud)

......但这有点罗嗦(是的,我知道,在大多数情况下,vb是罗嗦的).我想有一些东西可以用来将它减少到一个单行调用,所以我做了这个扩展方法.

Module Module1

    Sub Main()

        Dim str1 As String = "1"
        Dim str2 As String = "2"
        Dim str3 As String = "3"
        Dim str4 As String = "4"

        Console.WriteLine("Extension method return value = {0}", str1.SetEqual(str2, str3, str4))
        Console.WriteLine("String 1 = {0}", str1)
        Console.WriteLine("String 2 = …
Run Code Online (Sandbox Code Playgroud)

vb.net parameters byref paramarray

4
推荐指数
1
解决办法
2423
查看次数

如何使用可变数量的参数实现方法?

如何使用可变数量的参数实现方法?

在C#中,我们可以使用params关键字:

public class MyClass
{
    public static void UseParams(params int[] list)
    {
        for (int i = 0; i < list.Length; i++)
        {
            Console.Write(list[i] + " ");
        }
        Console.WriteLine();
    }
 }
Run Code Online (Sandbox Code Playgroud)

那我怎么能在F#中做到这一点?

type MyClass() =

    member this.SomeMethod(params (args:string array)) = ()
Run Code Online (Sandbox Code Playgroud)

我从上面的代码收到以下错误:

The pattern discriminator 'params' is not defined
Run Code Online (Sandbox Code Playgroud)

f# paramarray

2
推荐指数
1
解决办法
204
查看次数