Почему там нет Char.Пусто, как струна.Пусто?
есть ли причина для этого? Я спрашиваю, потому что если вам нужно использовать много пустых символов, то вы попадаете в ту же ситуацию, что и при использовании большого количества пустых строк.
Edit: причина этого использования была такова:
myString.Replace ('c', '')
поэтому удалите все экземпляры ' c из myString.
19 ответов:
нет такой вещи, как пустой шар. Ближайший вы можете получить это
''
, символ Unicode "null". Учитывая, что вы можете встроить это в строковые литералы или выразить его самостоятельно очень легко, зачем вам нужно отдельное поле для него? В равной степени, "это легко запутать""
и" "
" аргументы не относятся к''
.если бы вы могли привести пример того, где вы хотите его использовать и почему вы думаете, что это будет лучше, это может помочь...
символ, в отличие от строки, является дискретной вещью с фиксированным размером. Строка-это действительно контейнер символов.
Так, Чар.Пустые самом деле не имеет смысла в этом контексте. Если у вас есть символ, он не пуст.
вы могли бы использовать nullable chars.
char? c
использовать
Char.MinValue
, который работает так же, как '\0'. Но будьте осторожны, это не то же самое какString.Empty
.
Если вам не нужна вся строка, вы можете воспользоваться задержкой исполнения:
public static class StringExtensions { public static IEnumerable<char> RemoveChar(this IEnumerable<char> originalString, char removingChar) { return originalString.Where(@char => @char != removingChar); } }
вы даже можете объединить несколько персонажей...
string veryLongText = "abcdefghijk..."; IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText .RemoveChar('c') .RemoveChar('d') .Take(5);
... и только первые 7 символов будут оценены :)
EDIT: или, еще лучше:
public static class StringExtensions { public static IEnumerable<char> RemoveChars(this IEnumerable<char> originalString, params char[] removingChars) { return originalString.Except(removingChars); } }
и его использование:
var veryLongText = "abcdefghijk..."; IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText .RemoveChars('c', 'd') .Take(5) .ToArray(); //to prevent multiple execution of "RemoveChars"
по той же причине нет
int.Empty
. Контейнеры могут быть пустыми. Скалярных значений быть не может. Если вы имеете в виду 0 (который не пуст), то используйте''
. Если вы имеете в видуnull
, а затем использоватьnull
:)
char является типом значения, поэтому его значение не может быть null. (Если он не завернут в контейнер с нулевым значением).
поскольку он не может быть null, in содержит некоторый числовой код, и каждый код сопоставляется с некоторым символом.
myString = myString.Replace('c'.ToString(), "");
ОК, это не особенно элегантно для удаления буквы, так как .Способ замены имеет перегрузку, которая принимает строковые параметры. Но это работает для удаления возврата каретки, перевода строки, табуляции и т. д. В этом примере удаляются символы табуляции:
myString = myString.Replace('\t'.ToString(), "");
не ответ на ваш вопрос, но обозначить значение по умолчанию
char
вы можете использовать толькоdefault(char)
что же
char.MinValue
что, в свою очередь, то же самое, что и. Однако не следует использовать if для чего-то вроде пустой строки.
не отвечает на ваш первый вопрос - но для конкретной проблемы, которую вы имели, вы можете просто использовать строки вместо символов, верно?:
myString.Replace("c", "")
есть причина, по которой вы не хотите этого делать?
вы также можете перестроить строку символ за символом, исключая символы, от которых вы хотите избавиться.
вот метод расширения для этого:
static public string RemoveAny(this string s, string charsToRemove) { var result = ""; foreach (var c in s) if (charsToRemove.Contains(c)) continue; else result += c; return result; }
это не пятно или фантазии, но это работает хорошо.
используйте вот так:
string newString = "My_String".RemoveAny("_"); //yields "MyString"
самый простой способ одеяло удалить символ из строки, чтобы обрезать его
cl = cl.Trim(' ');
удаляет все пробелы в строке
как о BOM, магический символ Microsoft добавляет в начало файлов (по крайней мере XML)?
Если вы хотите, чтобы elliminate пустой символ в строке следующее будет работать, просто преобразовать в любое представление типа данных, которое вы хотите. спасибо,
private void button1_Click(object sender, EventArgs e) { Int32 i; String name; Int32[] array_number = new int[100]; name = "1 3 5 17 8 9 6"; name = name.Replace(' ', 'x'); char[] chr = name.ToCharArray(); for (i = 0; i < name.Length; i++) { if ((chr[i] != 'x')) { array_number[i] = Convert.ToInt32(chr[i].ToString()); MessageBox.Show(array_number[i].ToString()); } } }
С точки зрения языка C#, следующее может не иметь большого смысла. И это не прямой ответ на вопрос. Но fowlloing - это то, что я сделал в одном из моих бизнес-сценариев
char? myCharFromUI = Convert.ToChar(" "); string myStringForDatabaseInsert = myCharFromUI.ToString().Trim(); if (String.IsNullOrEmpty(myStringForDatabaseInsert.Trim())) { Console.Write("Success"); }
The
null
иwhite space
были разные бизнес-потоки в моем проекте. При вставке в базу данных, мне нужно вставитьempty string
в базу данных, если это белое пространство.
Я знаю, что это довольно старый, но я столкнулся с проблемой недавно с необходимостью делать несколько замен, чтобы сделать имя файла безопасным. Во-первых, в последней строке .NET.Функция Replace null эквивалентна пустому символу. Сказав это, то, что отсутствует в .Net, - это простая замена всего, что заменит любой символ в массиве на нужный символ. Пожалуйста, не стесняйтесь ссылаться на код ниже (работает в LinqPad для тестирования).
// LinqPad .ReplaceAll and SafeFileName void Main() { ("a:B:C").Replace(":", "_").Dump(); // can only replace 1 character for one character => a_B_C ("a:B:C").Replace(":", null).Dump(); // null replaces with empty => aBC ("a:B*C").Replace(":", null).Replace("*",null).Dump(); // Have to chain for multiples // Need a ReplaceAll, so I don't have to chain calls ("abc/123.txt").SafeFileName().Dump(); ("abc/1/2/3.txt").SafeFileName().Dump(); ("a:bc/1/2/3.txt").SafeFileName().Dump(); ("a:bc/1/2/3.txt").SafeFileName('_').Dump(); //("abc/123").SafeFileName(':').Dump(); // Throws exception as expected } static class StringExtensions { public static string SafeFileName(this string value, char? replacement = null) { return value.ReplaceAll(replacement, ':','*','?','"','<','>', '|', '/', '\'); } public static string ReplaceAll(this string value, char? replacement, params char[] charsToGo){ if(replacement.HasValue == false){ return string.Join("", value.AsEnumerable().Where(x => charsToGo.Contains(x) == false)); } else{ if(charsToGo.Contains(replacement.Value)){ throw new ArgumentException(string.Format("Replacement '{0}' is invalid. ", replacement), "replacement"); } return string.Join("", value.AsEnumerable().Select(x => charsToGo.Contains(x) == true ? replacement : x)); } } }
Если вы хотите удалить символы, которые удовлетворяют определенному условию, вы можете использовать это:
string s = "SoMEthInG"; s = new string(s.ToCharArray().Where(c => char.IsUpper(c)).ToArray());
(это оставит только прописные символы в строке.)
иными словами, вы можете преобразовать строку с
IEnumerable<char>
, внесите в него изменения, а затем преобразуйте его обратно в строку, как показано выше.опять же, это позволяет не только удалить определенный символ из-за лямбда-выражения, хотя вы можете сделать это, если вы измените лямбда-выражение вот так:
c => c != 't'
.