yield 返回空字符文字
Posted
技术标签:
【中文标题】yield 返回空字符文字【英文标题】:yield return empty character literal 【发布时间】:2013-03-25 04:49:16 【问题描述】:我正在编写一个 Linq 扩展方法,从字符串输入中生成 p455w0rd。
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;
如您所见,我想删除空格,但是当我使用 yield return '';
时,它给了我错误 Empty character literal
。
''
是什么,我怎样才能 return yield return nothing?
【问题讨论】:
不要产生任何东西,继续你的while循环。即case ' ': break;
您可以返回'\0'
。 ***.com/a/3670513/284240
而不是使用巨大的switch
,我建议你只构建一个Dictionary<char, char>
来映射值;它会简单得多。
【参考方案1】:
你不能yield return nothing
。如果它是一个空格,解决方案将是 not yield return。注释掉那行,你应该很好。
''
毫无意义。编译器会抱怨。没有“没有性格”这回事。
【讨论】:
+1 关键是给定'1','2',' ','3'
,你不想要像'1','2','','3'
这样的序列。您根本不想将 ' '
替换为任何内容,所以不要将 yield
替换为任何内容。
There is no such thing as "no character".
嗯,实际上,有。 '\0'
。 “空字符”。也就是说,它不应该在这种情况下使用。
nul 字符是有效字符。它有一个定义的值。它对许多编程语言都有特殊的意义,但它仍然是一个字符。 “no character”不能像“no int”一样存在,尽管我们经常说“no money”是指零:)
@nvoigt 肯定不存在任何字符(或没有 int)。您只需要将类型从 char
更改为 char?
。
@svick 即使是 Nullable 字符也总是有值。它只有一个 additional bool 值,告诉您 char 的值是对您有用还是只是随机垃圾。但它有一个价值,甚至是一个字符?不能有“没有价值”。您可以对其进行测试,如果 HasValue bool 为假,则检查可空字符中字符的值。它仍然是一个有值的字符。【参考方案2】:
''
毫无意义。没有“无字符”的概念——有 nul 字符,但与“无字符”不一样。将此与字符串进行比较,字符串可以是空引用(对字符串)或零长度字符串。
@George Duckett 在对您的问题的评论中已经回答:只需从 ' '
案例中删除 yield
。
【讨论】:
以上是关于yield 返回空字符文字的主要内容,如果未能解决你的问题,请参考以下文章
在spring mvc @ResponseBody中返回文字JSON字符串
对 Python 返回 JSON 作为字符串而不是文字感到困惑