Как заменить строку на дату по умолчанию?

#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 будет работать с массивом, но я предполагаю, что следующий вопрос будет заключаться в том, почему бы просто не использовать . Заменить(«,», «»»), чтобы удалить ненужные запятые?