我可以使用Format而不是使用子字符串吗?

时间:2015-02-25 07:13:40

标签: c# string substring

在我的C#桌面应用程序上使用内存配置文件我发现字符串没有从内存中释放,导致缓慢而渐进的累积。

我有这段代码:

var ToYYYMMDDHHMMSS = "YYYMMDDHHMMSS";
var toYR = ToYYYMMDDHHMMSS.Substring(0, 4);
var toMN = ToYYYMMDDHHMMSS.Substring(4, 2);
var toDY =ToYYYMMDDHHMMSS.Substring(6, 2);
var toHR = ToYYYMMDDHHMMSS.Substring(8, 2);
var toMI = ToYYYMMDDHHMMSS.Substring(10, 2);
var motionPath = string.Format("{0}\\Catalogues\\{1}\\{2}\\{3}\\{4}\\{5}\\{6}", Shared.MOTION_DIRECTORY, camIndex, toYR, toMN, toDY, toHR, toMI);

是否有使用子字符串的替代方法?我可以使用String.Format来获得我想要的结果吗?

NB 对于我对我的问题的蹩脚措辞,我感到非常抱歉。

var ToYYYMMDDHHMMSS =“YYYMMDDHHMMSS”;

我应该补充说“YYYMMDDHHMMSS”是一个总是在变化的时间戳 {道歉)

1 个答案:

答案 0 :(得分:3)

我的猜测是,您的真实代码的值类似于20150225071945 - 所以实际上不是文字YYYYMMDDHHMMSS。如果是这种情况,我会将值解析为DateTime而不是提取子字符串:

DateTime dateTime = DateTime.ParseExact(text, "yyyyMMddHHmmss",
                                        CultureInfo.InvariantCulture);
var motionPath = string.Format(@"{0}\Catalogues\{1:yyyy\\MM\\dd\\HH\\mm\\ss}",
                               Shared.MOTION_DIRECTORY, dateTime);

请注意,格式字符串本身是逐字字符串文字,因此您不需要转义反斜杠 - 但我在\\的格式字符串中有DateTime因为{{ 1}}格式化代码会将DateTime视为转义。

另一种方法是分别格式化日期的每个部分:

\

或使用var motionPath = string.Format(@"{0}\Catalogues\{1:yyyy}\{1:MM}\{1:dd}\{1:HH}\{1:mm}\{1:ss}", Shared.MOTION_DIRECTORY, dateTime);

Path.Combine