#c#
#c#
Вопрос:
У меня есть этот код.
string ED= collection["ED"].Replace(string.Empty,"1/1/2011").Split(',').ToString();
когда я делаю это, я получаю эту ошибку.
String cannot be of zero length.
Parameter name: oldValue
я что-то здесь делаю не так?
Спасибо
Комментарии:
1. Вы не можете использовать
String.Empty
в качестве строки для замены. У вас должна быть строка длиной не менее 1 символа2. Да, это коллекция арри Реджи.
3. Похоже, что сообщение об ошибке точно сообщило вам, что вы делаете неправильно. Что вас все еще смущает?
Ответ №1:
oldValue — это первый параметр Replace()
, поэтому я предполагаю, что вы не можете перейти string.Empty
к нему
Комментарии:
1. не нужно гадать. Если бы это было допустимо, к чему бы это привело, теперь это было бы переполнением стека.
Ответ №2:
Первый параметр метода Replace не может быть пустой строкой.
Смотрите раздел исключений в этой статье msdn.
Не зная немного больше о том, чего вы пытаетесь достичь, трудно помочь в дальнейшем. В нынешнем виде, если метод Replace будет выполнен успешно, метод Split преобразует строку в массив, а затем метод toString вернет «System.Строка[]». Я сомневаюсь, что это тот результат, который вы ищете.
Ответ №3:
string.Replace
требуется заменить все значения первого аргумента вторым аргументом. Так "abcabcabc".Replace("a", "z")
становится "zbczbczbc"
.
Замена всех экземпляров пустой строки приведет к бесконечному циклу замен. "".Replace(string.Empty, "a")
заменяет пустую строку на «a», но до и после a все еще есть пустая строка, которую нужно заменить, и поэтому у нас есть «aaa», но в начале и в конце строки все еще есть пустая строка, а также между a, поэтому, заменяя их, мы получаем «aaaaaaa» и т.д.
Вы действительно хотите использовать дату по умолчанию, если значение пустое? В этом случае вы хотите сделать что-то вроде:
var temp = collection["ED"];
if (string.IsNullOrEmpty(temp)) {
temp = "1/1/2011";
}
string ED = temp.Split(',').ToString();
Комментарии:
1. temp.Split(‘,’). toString(); вернет «System. String[]» независимо от того, какое значение содержит temp. Метод Split() преобразует объект string в массив строк.
2. @Andy Rose Верно. Я даже не думал об этой части, просто скопировал это дословно из OP.
3. Я думаю,
string ED = string.Join("", temp.Split(','))
сойдет. Я подожду, пока не попробую это на самом деле, прежде чем обновлять.4. Join будет работать с массивом, но я предполагаю, что следующий вопрос будет заключаться в том, почему бы просто не использовать . Заменить(«,», «»»), чтобы удалить ненужные запятые?