foreach (string sn in MACOrSerial.Split(','))
{
MACOrSerial = sn.Trim();
}
MACORSerial包含以逗号分隔的文本字符串(EX.AA123241,BB123431,CC1231243)。 我抓住一个子串并将其放入相同的MACORSerial中。
这不会给我带来任何问题,因为foreach仍会在内存中使用原始 MACOrSerial。
虽然我认为这是最节省内存的方法,但它是否合适或者我应该使用新名称创建另一个字符串,例如
MacORSerialSubString = sn.Trim()?
我没有任何记忆问题。我只是想确保我的代码干净简洁。
答案 0 :(得分:8)
您的假设不正确 - 循环超过string[]
产生的Split
- 这些都是新的字符串实例。
您没有通过将字符串重新分配给原始变量来保存任何内存,并且您通过重用变量而失去了可读性。
这是一种更具可读性并使用一些内置功能的方法:
string[] serialNumbers = MACOrSerial.Split(new [] {',', ' ', '\r', '\n' },
StringSplitOptions.RemoveEmptyEntries);
foreach (string sn in serialNumbers)
{
// do stuff
}
答案 1 :(得分:4)
我的$ .02-您发布的代码非常不直观,因为它打破了预期的模式。
恕我直言,以一种其他开发人员可以一眼就能理解的方式编写代码,而不是(实际上/尝试)对内存进行微优化,尤其是当(正如其他人已经指出)你的微观时,更为重要。 -optimization实际上并没有减少使用的内存量。
答案 2 :(得分:2)
我会创建一个新变量,以便您的代码更清晰。它对记忆没有任何明显的影响。
答案 3 :(得分:1)
为了清晰(以及稍后维护)代码,我更喜欢使用单独的变量。另外,我会在前面删除空字符串:
foreach (string sn in MACOrSerial.Split(',', StringSplitOptions.RemoveEmptyEntries))
{
string MacORSerialSubString = sn.Trim();
}
答案 4 :(得分:1)
实际上,您的迭代将使用MACOrSerial.Split()
调用的结果,该调用是一个独立于MACOrSeria
l变量的数组。
在内存使用方面使用MACOrSerial
或其他字符串变量之间没有区别,每次调用sn.Trim()
,生成一个新字符串,它只是对这个新字符串放在你的字符串变量中。