Вы имеете в виду, что определение автоматически сгенерированного кода, например:
Foo {##} , Bar {Date}
и это даст:
Foo 01 , Bar 20100420
Foo 02 , Bar 20100420
не так ли?
Я думаю, что RegExpr.Replace () - хорошее решение проблемы ##, вы можете сделать что-то вроде этого:
private void Generate()
{
Regex doubleSharpRegEx = new Regex("{#+}");
string customString = "Foo {####}";
string[] generatedCodes = new string[3];
for (int i = 0; i < generatedCodes.Length; i++)
{
string newString = doubleSharpRegEx.Replace(customString,
match =>
{
// Calculate zero padding for format
// remove brackets
string zeroPadding = match.Value.Substring(1, match.Value.Length - 2);
// replace # with zero
zeroPadding = zeroPadding.Replace('#', '0');
return string.Format("{0:" + zeroPadding + "}", i);
});
generatedCodes[i] = newString;
}
}
И массив сгенерированных кодов содержит:
Foo 0000
Foo 0001
Foo 0002
Foo 0003
EDIT:
Лямбда-выражения работают только для фреймворка 3.5.
Если вам нужно решение для 2.0, вы должны только заменить часть лямбда-выражения делегатом (очевидно, установив i для делегированного метода, например члена класса)
РЕДАКТИРОВАТЬ 2:
Вы можете объединить ответ 2, например, в следующем коде:
private void Generate2()
{
Regex customCodeRegex = new Regex("{CustomCode}");
Regex dateRegex = new Regex("{Date}");
Regex doubleSharpRegex = new Regex("{#+}");
string customString = "Foo-{##}-{Date}-{CustomCode}-{####}";
string newString = customCodeRegex.Replace(customString, "{0}");
newString = dateRegex.Replace(newString, "{1}");
newString = doubleSharpRegex.Replace(newString,
match =>
{
string zeroPadding = match.Value.Substring(1, match.Value.Length - 2);
zeroPadding = zeroPadding.Replace('#', '0');
return "{2:" + zeroPadding + "}";
});
string customCode = "C001";
string date = DateTime.Today.ToString("yyyyMMdd");
string[] generatedCodes = new string[3];
for (int i = 0; i < generatedCodes.Length; i++)
{
generatedCodes[i] = string.Format(newString, customCode, date, i);
}
}