我正在尝试将一些JS转换为C#,我得到了这篇文章,但是无法弄清楚C#的等价物是什么。希望有人可以指出我正确的方向?
我只需要帮助这两个功能的内容。 $ iterator在另一个地方编码,但我猜测以下代码的C#版本不需要它。如果你需要我添加它,我可以。
调用这些函数的上下文是:
var centers = Lambda.array(Lambda.map(this.hexes,function(hex) {
return me.hexToCenter(hex);
}));
功能是:
var Lambda = function() { }
Lambda.array = function(it) {
var a = new Array();
var $it0 = $iterator(it)();
while( $it0.hasNext() ) {
var i = $it0.next();
a.push(i);
}
return a;
}
Lambda.map = function(it,f) {
var l = new List();
var $it0 = $iterator(it)();
while( $it0.hasNext() ) {
var x = $it0.next();
l.add(f(x));
}
return l;
}
答案 0 :(得分:6)
您并不真正需要自己的map
和array
方法。已有相同的功能,您只需在文件顶部添加using System.Linq;
即可使用Select
,这是一种投影方法,ToArray
从您的集合中创建了一个数组。它们都是IEnumerable<T>
上设置的扩展方法,因此您几乎可以在任何集合中使用它们。
var centers = hexes.Select(x => me.hexToCenter(x)).ToArray();
等同于您的JavaScript代码:
var centers = Lambda.array(Lambda.map(this.hexes,function(hex) {
return me.hexToCenter(hex);
}));
答案 1 :(得分:2)
这看起来像一个相当简单的C#lambda:
var centers = this.hexes.Select(hex => me.hexToCenter(hex)).ToList();
LINQ提供了 Select
和ToList
扩展方法 - 您需要添加using System.Linq
才能使用它们。
答案 2 :(得分:1)
您可能希望在此处使用LINQ路线。
您的map
相当于LINQ的Select
,例如
var centers = this.hexes.Select(hex => me.hexToCenter(hex)).ToArray();
表达式hex => me.hexToCenter(hex)
是C#中的lambda表达式,Select
用于将this.hexes
投影到所需的表单中。
ToArray()
相当于您的Lambda.array
来电。
101 LINQ Samples in C#是一个很好的资源。
注意 101个样本中的大多数使用查询语法,而不是我上面使用的功能语法。对于简单的情况,它们大致相同,但是对于来自JS背景的功能性语法感到满意应该不是问题。