为什么没有Char.Empty就像String.Empty?

这是有原因吗? 我在问这个,因为如果你需要使用大量的空字符,那么你就会遇到和使用大量空string一样的情况。

编辑:这种用法的原因是这样的:

myString.Replace ('c', '') 

所以从myString中删除'c's的所有实例。

没有空的字符。 您可以得到最接近的是'\0' ,即Unicode“空”字符。 既然你可以把它embedded到string文字中或者很容易地expression出来,为什么还要为它分开一个字段呢? 同样,“很容易混淆""" " “参数不适用于'\0'

如果你能举一个你想使用它的例子,为什么你认为它会更好,那可能会有帮助。

你的陈述

  myString.Replace ('c', '\0') 

不会删除任何字符。 它将用'\0' (string结尾,EOS)replace它们,结果会有所不同。 一些string操作在遇到EOS时可能会停止,但在.NET中,大多数操作将像处理其他字符一样处理。 尽量避免'\0'

这个用法的原因是这样的: myString.Replace ('c', '')所以从myString中删除'c'所有实例。

要从string中删除特定的字符,可以使用string重载:

  myString = myString.Replace ("c", String.Empty); 

字符不像string,是一个固定大小的离散事物。 一个string实际上是一个字符的容器。

所以,Char.Empty在这种情况下并没有什么意义。 如果你有一个字符,它不是空的。

没有空的人物。 它总是包含一些东西 。 即使“\ 0”是一个字符。

使用与'\ 0'相同的Char.MinValue 。 但要小心它不是像String.Empty

你可以使用可空字符。

 char? c 

如果你不需要整个string,你可以利用延迟执行:

 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个字符将被评估:)

编辑:或者,甚至更好:

 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(不是空的),那么使用'\0' 。 如果你的意思是null ,那么使用null 🙂

char是一个值types,所以它的值不能为空。 (除非包装在可空的容器中)。

由于它不能为空,所以包含一些数字代码,并且每个代码映射到某个字符。

不是你的问题的答案,而是表示一个你可以使用的默认char

 default(char) 

char.MinValue相同, char.MinValue\0相同。 一个人不应该使用,如果像空string,但是。

 myString = myString.Replace('c'.ToString(), ""); 

好吧,这不是特别优雅的去除字母,因为.Replace方法有一个重载string参数。 但这适用于删除回车符,换行符,制表符等。本示例删除制表符:

 myString = myString.Replace('\t'.ToString(), ""); 

使用

 myString.Replace ("c", "") 

BOM如何,微软添加到文件的起始(至less是XML)的魔法字符?

不回答你的第一个问题 – 但是对于你的具体问题,你可以使用string,而不是字符,对吗?

 myString.Replace("c", "") 

有一个原因,你不想这样做?

如果你想清除string中的空字符,下面的工作,只要转换为任何你想要的数据types表示。 谢谢,

 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#语言方面,以下可能没有多大意义。 这不是对问题的直接回答。 但是,在我的一个业务场景中,我是这样做的

  char? myCharFromUI = Convert.ToChar(" "); string myStringForDatabaseInsert = myCharFromUI.ToString().Trim(); if (String.IsNullOrEmpty(myStringForDatabaseInsert.Trim())) { Console.Write("Success"); } 

这个white space在我的项目中有不同的业务stream程。 在插入数据库时​​,如果是空格,我需要将empty string插入数据库。

我知道这是一个很老的,但最近我遇到了一个问题,必须做多个replace,以使文件名安全。 首先,在最新的.NET string.Replace函数中null等价于空字符。 话虽如此,.Net所缺less的是一个简单的replace,它将用一个所需的字符replace数组中的任何字符。 请随时参考下面的代码(运行在LinqPad进行testing)。

 // 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)); } } } 

您也可以按字符重build您的string,不包括您想要删除的字符。

这是一个扩展方法来做到这一点:

  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" 

如果你想删除满足特定条件的字符,你可以使用这个:

 string s = "SoMEthInG"; s = new string(s.ToCharArray().Where(c => char.IsUpper(c)).ToArray()); 

(这将只留下string中的大写字符。)

换句话说,您可以将string转换为IEnumerable<char> ,对其进行更改,然后将其转换回string,如上所示。

同样,这样做不仅可以删除特定的字符,因为lambdaexpression式,尽pipe如果更改lambdaexpression式就可以这样做: c => c != 't'

最简单的方法来从string中删除一个字符是修剪它

cl = cl.Trim(' ');

删除string中的所有空格