Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么没有Char.Empty,就像String.Empty一样?_C#_.net_String_Char_Base Class Library - Fatal编程技术网

C# 为什么没有Char.Empty,就像String.Empty一样?

C# 为什么没有Char.Empty,就像String.Empty一样?,c#,.net,string,char,base-class-library,C#,.net,String,Char,Base Class Library,这有什么原因吗?我这样问是因为如果你需要使用大量的空字符,那么你会遇到与使用大量空字符串相同的情况 编辑:此用法的原因如下: myString.Replace ('c', '') 因此,从myString中删除所有“c”的实例。没有空字符这样的东西。您可以获得的最接近的字符是'\0',即Unicode“null”字符。既然您可以将其嵌入字符串文本中,或者可以非常轻松地表达它,为什么您希望为它指定一个单独的字段?同样,“很容易混淆”和“”参数不适用于'\0' 如果你能举例说明你想在哪里使用它,以

这有什么原因吗?我这样问是因为如果你需要使用大量的空字符,那么你会遇到与使用大量空字符串相同的情况

编辑:此用法的原因如下:

myString.Replace ('c', '')

因此,从myString中删除所有“c”的实例。

没有空字符这样的东西。您可以获得的最接近的字符是
'\0'
,即Unicode“null”字符。既然您可以将其嵌入字符串文本中,或者可以非常轻松地表达它,为什么您希望为它指定一个单独的字段?同样,“很容易混淆
”参数不适用于
'\0'


如果你能举例说明你想在哪里使用它,以及为什么你认为它会更好,这可能会有帮助…

没有空字符这回事。它总是包含一些东西。甚至“\0”也是一个字符。

与字符串不同,字符是具有固定大小的离散对象。字符串实际上是字符的容器


所以,Char.Empty在这种情况下是没有意义的。如果您有一个char,它不是空的。

使用与“\0”相同的
char.MinValue
。但是要小心,它与
String.Empty
不同,这与没有
int.Empty
的原因相同。容器可以为空,标量值不能为空。如果您的意思是0(不是空的),则使用
'\0'
。如果您的意思是
null
,那么使用
null
:)

字符是一种值类型,因此其值不能为null。(除非包装在可为空的容器中)

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

您可以使用字符


如果不需要整个字符串,可以利用延迟执行:

public static class StringExtensions
{
    public static IEnumerable<char> RemoveChar(this IEnumerable<char> originalString, char removingChar)
    {
        return originalString.Where(@char => @char != removingChar);
    }
}
公共静态类StringExtensions
{
公共静态IEnumerable RemoveChar(此IEnumerable originalString,char removingChar)
{
返回originalString.Where(@char=>@char!=removingChar);
}
}
你甚至可以组合多个字符

string veryLongText = "abcdefghijk...";

IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
            .RemoveChar('c')
            .RemoveChar('d')
            .Take(5);
string veryLongText=“abcdefghijk…”;
IEnumerable First FiveChars without CsandDS=veryLongText
.RemoveChar('c'))
.RemoveChar('d'))
.采取(5);
。。。并且只计算前7个字符:)

编辑:或者更好:

public static class StringExtensions
{
    public static IEnumerable<char> RemoveChars(this IEnumerable<char> originalString,
        params char[] removingChars)
    {
        return originalString.Except(removingChars);
    }
}
公共静态类StringExtensions
{
公共静态IEnumerable RemoveChars(此IEnumerable原始字符串,
params char[]removingChars)
{
返回原始字符串(除去字符);
}
}
及其用法:

        var veryLongText = "abcdefghijk...";
        IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
            .RemoveChars('c', 'd')
            .Take(5)
            .ToArray(); //to prevent multiple execution of "RemoveChars"
var veryLongText=“abcdefghijk…”;
IEnumerable First FiveChars without CsandDS=veryLongText
.RemoveChars('c','d')
.采取(5)
.ToArray()//防止多次执行“RemoveChars”
微软在文件开头添加的神奇角色(至少是XML)怎么样

好的,这对于删除字母不是特别优雅,因为.Replace方法有一个重载,它接受字符串参数。但这适用于删除回车符、换行符、制表符等。此示例删除制表符:

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

没有回答您的第一个问题-但是对于您遇到的特定问题,您可以使用字符串而不是字符,对吗

myString.Replace("c", "")

您不想这样做有什么原因吗?

不是对您的问题的回答,而是表示默认的
char
,您可以使用

default(char)

这与
char.MinValue
相同,后者又与
\0
相同。但是,不应该将if用于空字符串之类的内容。

如果要消除字符串中的空字符,以下操作将起作用。只需转换为您想要的任何数据类型表示

private void按钮1\u单击(对象发送者,事件参数e)
{
int32i;
字符串名;
Int32[]数组_编号=新整数[100];
name=“1 3 5 17 8 9 6”;
name=name.Replace(“”,'x');
char[]chr=name.ToCharArray();
对于(i=0;i
就C语言而言,以下内容可能没有多大意义。这并不是对这个问题的直接回答。但以下是我在一个业务场景中所做的

char?myCharFromUI=Convert.ToChar(“”);
字符串myStringForDatabaseInsert=myCharFromUI.ToString().Trim();
if(String.IsNullOrEmpty(myStringForDatabaseInsert.Trim()))
{
控制台。写入(“成功”);
}

null
空白
在我的项目中有不同的业务流程。插入数据库时,如果是空白,我需要将
空字符串
插入数据库。

我知道这个字符串很旧,但最近我遇到了一个问题,需要多次替换以确保文件名的安全。首先,在最新的.NET字符串中,Replace函数null等价于空字符。话虽如此,.Net缺少的是一个简单的“全部替换”,它将用所需的字符替换数组中的任何字符。请随时参考下面的代码(在LinqPad中运行以进行测试)

//LinqPad.ReplaceAll和SafeFileName
void Main()
{
(“a:B:C”).Replace(“:”,“”).Dump();//只能用一个字符替换一个字符=>a_B_C
(“a:B:C”).Replace(“:”,null).Dump();//null替换为empty=>aBC
(“a:B*C”).Replace(“:”,null.Replace(“*”,null.Dump();//必须为倍数进行链运算
//需要一个替补,这样我就不必连环呼叫了
(“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
myString.Replace("c", "")
default(char)
// 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));
        }

    }

}
    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"
myString.Replace ("c", "")
string s = "SoMEthInG";
s = new string(s.Where(c => char.IsUpper(c)).ToArray());
public static string QuitEscChars(this string s) 
{
    return s.Replace(((char)27).ToString(), "");
}