将一些JS转换为C#

时间:2016-01-15 10:00:44

标签: javascript c#

我不想将一些代码从JS转换为C#,但却无法真正想象一部分...

function getHisto(pixels) {
        var histosize = 1 << (3 * sigbits),
            histo = new Array(histosize),
            index, rval, gval, bval;
        pixels.forEach(function(pixel) {
            rval = pixel[0] >> rshift;
            gval = pixel[1] >> rshift;
            bval = pixel[2] >> rshift;
            index = getColorIndex(rval, gval, bval);
            histo[index] = (histo[index] || 0) + 1;
        });
        return histo;
    }

我对histo []有什么期望?我不明白这一行:

histo[index] = (histo[index] || 0) + 1;

如果您需要任何其他信息,我会尝试提供。

编辑1:我特意指histo[index] || 0

4 个答案:

答案 0 :(得分:1)

histo[index] = (histo[index] || 0) + 1;

添加到数组并通过current index + 10 + 1计算出放置位置的位置。

基本上,或(||)处理它的第一个添加到histo的边缘情况。

答案 1 :(得分:1)

该行

histo[index] = (histo[index] || 0) + 1;

是实现此目标的捷径:

if (!histo[index]) { 
    histo[index] = 0; 
}
histo[index] = histo[index] + 1;

对你来说可能更有意义。

请参阅this answer for comparison between the almost equivalent ?? in C# and || in JS

答案 2 :(得分:1)

方括号表示法与C#中的相同,它是按索引访问的数组。

看看this tutorial on MSDN

例如。如果你有一个包含两个项目的数组:

// javascript
var x = ["a", "b"];

// C#
var y = string[] {"a", "b"};

第一项是索引0,第二项是索引1。然后,您可以使用方括号表示法访问每个项目:

var first = x[0];
var second = x[1];

答案 3 :(得分:1)

||Logical-OR operator in JavaScript

在C#中替换它的等价物将是?? Null-Coalesce operator

所以基本上在C#中,你的行看起来像这样。

histo[index] = (histo[index] ?? 0) + 1;