c# - 我可以使用 Format 而不是使用 substring 吗?

标签 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 来获得我想要的结果吗?

注意 我很抱歉我的问题措辞不佳..

var ToYYYMMDDHHMMSS = "YYYMMDDHHMMSS";

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

最佳答案

我的猜测是您的真实代码的值类似于 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 的格式字符串中因为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 :

var motionPath = Path.Combine(Shared.MOTION_DIRECTORY,
                              "Catalogues",
                              dateTime.ToString("yyyy"),
                              dateTime.ToString("MM"),
                              dateTime.ToString("dd"),
                              dateTime.ToString("HH"),
                              dateTime.ToString("mm"),
                              dateTime.ToString("ss"));

关于c# - 我可以使用 Format 而不是使用 substring 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28713235/

相关文章:

java - 如何将字符串与字符串数组的特定部分进行比较?

php - 获取字符串的子串

SQL Server - 选择最后一个连字符后面的所有字符的子字符串

java - 如何从 Java 字符串中删除除某些字符之外的所有字符?

localdb的sqlserver的Java连接字符串

带有 MessageBox 的 C# String.SubString 不显示任何内容

c# - 如何通过缩小 c# 和 linq 中的另一个列表来创建列表

c# - 如何从 DLL 访问带有接口(interface)的类?

c# - 从相关数据库中获取值(value)

c# - 覆盖可变对象的 GetHashCode?