我正在尝试在 C# 中重现此函数:
def sendData(self, eventCodes, data = None):
if data:
self.push('\x01'.join(map(str, [eventCodes] + data)) + "\x00")
else:
self.push(eventCodes + "\x00")
我相信 eventCodes 是一个字符串,data 是一个数组。我不明白 map() 在这里是如何工作的。我认为它遍历整个数组,为每个项目(在本例中为“str”)执行一个函数。但是,我看不出 [eventCodes] + data 是一个数组。
我有兴趣在 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()))
final方法:
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/