我正在尝试在C#中重现此功能:

def sendData(self, eventCodes, data = None):
    if data:
        self.push('\x01'.join(map(str, [eventCodes] + data)) + "\x00")
    else:
        self.push(eventCodes + "\x00")


我相信eventCodes是一个字符串,数据是一个数组。我不明白map()如何在这里工作。我认为它会遍历整个数组,为每个项目执行一个函数(在本例中为“ str”)。但是,我看不到[eventCodes] +数据如何成为数组。

我有兴趣在C#中获得此过程'\x01'.join(map(str, [eventCodes] + data)) + "\x00“的结果。

最佳答案

map(x, y)类似于以下C#代码:

y.Select(item => x(item))


所以这:map(str, [eventCodes] + data)类似于此:

([eventCodes] + data).Select(item => str(item))`
 ^-----------------^                 ^-^


突出显示的部分尚不是有效的C#代码。什么是str,也许我们可以用ToString代替它:

([eventCodes] + data).Select(item => item.ToString())`
 ^-----------------^


[eventCodes] + data将包含单个字符串eventCodes的列表与data中的字符串集合连接在一起,因此我们具有以下内容:

new[] { eventCodes }.Concat(data).Select(item => item.ToString())


迈出一步,这是:

`\x01`.join(...)


在C#中:

string.Join("\x01", ...)


所以我们得到这个:

string.Join("\x01", new[] { eventCodes }.Concat(data)
    .Select(item => item.ToString()))


最终方法:

public void sendData(string eventCodes, IEnumerable<string> data = null)
{
    if (data != null)
        push(string.Join("\x01", new[] { eventCodes }
            .Concat(data.Select(item => item.ToString()))) + "\x00");
    else
        push(eventCodes + "\x00");
}


我个人将更改代码如下:

public void sendData(string eventCodes, IEnumerable<string> data = null)
{
    string element;
    if (data != null)
        element = string.Join("\x01", new[] { eventCodes }
            .Concat(data.Select(item => item.ToString())))
    else
        element = eventCodes;
    push(element + "\x00");
}

关于c# - Python(到C#)方法转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20682596/

10-11 22:04