C# 返回空字符文本
我正在编写一个Linq扩展方法,从字符串输入生成一个p455w0rdC# 返回空字符文本,c#,linq,char,yield-return,C#,Linq,Char,Yield Return,我正在编写一个Linq扩展方法,从字符串输入生成一个p455w0rd public static IEnumerable<char> ToPasswordFormat(this IEnumerable<char> source) { var enumerator = source.GetEnumerator(); while (enumerator.MoveNext()) { switch((char
public static IEnumerable<char> ToPasswordFormat(this IEnumerable<char> source)
{
var enumerator = source.GetEnumerator();
while (enumerator.MoveNext())
{
switch((char)enumerator.Current)
{
case 'a':
yield return '4';
break;
case 'e':
yield return '3';
break;
case 'l':
yield return '7';
break;
case 'i':
yield return '!';
break;
case ' ':
yield return '';
break;
default:
yield return (char)enumerator.Current;
break;
}
}
}
公共静态IEnumerable ToPasswordFormat(此IEnumerable源代码)
{
var枚举器=source.GetEnumerator();
while(枚举数.MoveNext())
{
开关((字符)枚举器.Current)
{
案例“a”:
收益率“4”;
打破
案例“e”:
收益率“3”;
打破
案例“l”:
收益率‘7’;
打破
案例“i”:
收益率回报率“!”;
打破
案例“”:
收益率‘;
打破
违约:
产生返回(字符)枚举数.Current;
打破
}
}
}
正如您所看到的,我想删除空格,但当我使用时,会返回“”代码>它给我错误空字符文本
什么是”
,我怎样才能不返回任何内容?您不能不返回任何内容。解决方案是不如果是空白,则产生收益。把那句话注释掉,你就应该很好了
“
毫无意义。编译器会抱怨的。没有“没有性格”这回事
“
毫无意义。没有“无字符”的概念——有nul字符,但它与“无字符”不同。将其与字符串进行比较,字符串可以是空引用(字符串)或零长度字符串
已经在@George Duckett对您的问题的评论中得到了回答:只需从'
案例中删除收益
不要放弃任何东西,继续你的while循环。i、 e.案例“”:中断
您可以返回'\0'
。与其使用巨大的开关
,我建议您只需构建一个字典
来映射值;它会简单得多。+1关键是给定'1'、'2'、''、'3'
您不需要像'1'、'2'、''、'3'
这样的序列。你根本不想用任何东西来替换”
,所以不要产生任何东西。没有“无字符”这样的东西。
事实上是有的<代码>'\0'
。“空字符”。也就是说,它不应该在这个上下文中使用。nul字符是一个有效字符。它有一个定义的值。它对许多编程语言都有特殊的意义,但它仍然是一个字符。“无字符”的存在方式与“无整数”的存在方式不同,尽管我们经常在零的时候说“无钱”:@nvoigt没有字符(或无整数)肯定存在。您只需将类型从char
更改为char?
@svick即使是可为空的char也始终有一个值。它只有一个额外的bool值,告诉您char的值对您有用还是只是随机垃圾。但是它有一个值,甚至是一个字符?不能有“无价值”。您可以对其进行测试,如果HasValue bool为false,则检查可空字符中字符的值。它仍然是一个有值的字符。