我正在尝试在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/