通过引用传递HashSet <string>

Jam*_*ery 1 c#

是否可以通过引用函数传递HashSet?这是我目前的代码.

主要

this.scrapeFriends(startUsers, userIDs, 100);
Run Code Online (Sandbox Code Playgroud)

功能

private void scrapeFriends(StringCollection startUsers, ref HashSet<string> userIDs, int p)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

如果我删除它的工作原理.如果我添加它,它不会,它将无法编译.

ang*_*son 8

总是通过HashSet<T>引用传递,因为它是引用类型.

ref关键字是有你传递变量引用.

基本上:

  • 无论有没有ref,您都可以更改内容HashSet<T>
  • 随着ref关键字,可以更换HashSet<T>一个实例不同的实例,并具有调用代码是意识到这一点(你正在修改传递给方法的变量)
  • 如果没有ref关键字,如果用不同的实例替换实例,那个更改只会在被调用的方法中生效,调用它的代码仍然具有旧的引用

代码未编译的原因是,如果您为方法创建ref参数参数,则必须使用ref关键字调用它,因此将调用代码更改为:

this.scrapeFriends(startUsers, ref userIDs, 100);
                               ^^^
                                |
                                +-- add this
Run Code Online (Sandbox Code Playgroud)