相关疑难解决方法(0)

为什么要使用params关键字?

我知道这是一个基本问题,但我找不到答案.

为什么要用它?如果你编写一个函数或一个使用它的方法,当你删除它时代码仍然可以正常工作,100%没有它.例如:

使用params:

static public int addTwoEach(params int[] args)
{
    int sum = 0;
    foreach (var item in args)
        sum += item + 2;
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

没有参数:

static public int addTwoEach(int[] args)
{
    int sum = 0;
    foreach (var item in args)
       sum += item + 2;
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

c# variadic parameter-passing variadic-functions params

326
推荐指数
7
解决办法
18万
查看次数

在C#中使用位掩码

假设我有以下内容

int susan = 2; //0010
int bob = 4; //0100
int karen = 8; //1000
Run Code Online (Sandbox Code Playgroud)

我将10(8 + 2)作为参数传递给方法,我想将其解码为苏珊和卡伦

我知道10是1010

但是我如何做一些逻辑来查看是否检查了特定位

if (condition_for_karen) // How to quickly check whether effective karen bit is 1
Run Code Online (Sandbox Code Playgroud)

现在,我能想到的是检查我通过的号码是否正确

14 // 1110
12 // 1100
10 // 1010
8 //  1000
Run Code Online (Sandbox Code Playgroud)

当我在我的真实场景中拥有更多的实际比特时,这似乎是不切实际的,使用掩码来检查我是否满足karen条件的更好方法是什么?

我可以想到向左移动然后向后移动然后向右移动然后移回到除了我感兴趣的那个之外的其他位置,但这似乎也过于复杂.

c# bitmask

91
推荐指数
5
解决办法
12万
查看次数

以最优化的方式交叉两组

给定两组值,我必须找到它们之间是否存在任何共同元素,即它们的交集是否为空.

为此目的,哪个标准C#集合最适合(在性能方面)?我知道linq有一个Intersect扩展方法来找出两个列表/数组的交集,但我的重点是性能方面Big-O notation.

如果我必须找出两组的交集怎么办?

c# set

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