我想像这样遍历字母:
foreach(char c in alphabet)
{
//do something with letter
}
字符数组是执行此操作的最佳方法吗?(感觉很hacky)
编辑:度量标准是“在保持可读性和鲁棒性的同时实现最少键入”
我想像这样遍历字母:
foreach(char c in alphabet)
{
//do something with letter
}
字符数组是执行此操作的最佳方法吗?(感觉很hacky)
编辑:度量标准是“在保持可读性和鲁棒性的同时实现最少键入”
Answers:
(假设ASCII等)
for (char c = 'A'; c <= 'Z'; c++)
{
//do something with letter
}
另外,您可以将其拆分给提供程序并使用迭代器(如果您打算支持国际化):
public class EnglishAlphabetProvider : IAlphabetProvider
{
public IEnumerable<char> GetAlphabet()
{
for (char c = 'A'; c <= 'Z'; c++)
{
yield return c;
}
}
}
IAlphabetProvider provider = new EnglishAlphabetProvider();
foreach (char c in provider.GetAlphabet())
{
//do something with letter
}
Enumerable.Range('a', 'z'-'a' + 1).Select(x=>(char)x)
Cast
,则会发现编译器将不接受它,除非您强制转换为object
first。这使其成为拳击比赛的转换,因此您只能准确输入所输入的内容。因此,我撤回我的评论。
public interface IAlphabetProvider { IList<string> GetAlphabet(); }
到帖子中以使其更加清晰,那将是非常不错的,因为它是用户定义的界面。从表面上看,它似乎IAlphabetProvider
是.Net框架类库中已经存在的接口,并且您只需实现它即可解决OP的问题。
或者你可以做
string alphabet = "abcdefghijklmnopqrstuvwxyz";
foreach(char c in alphabet)
{
//do something with letter
}
String.GetEnumerator()
去char
成炭,所以你只需要一个部分Unicode代码点/代理对,如果你的字符串中包含此类字符。因此,您可能希望同时标准化您的字母和要与之比较的数据,并确保使用数字代码点而不是char
:stackoverflow.com/a/28155130/429091
Enumerable.Range(65, 26).Select(a => new { A = (char)(a) }).ToList().ForEach(c => Console.WriteLine(c.A));
foreach
语句通常对于在序列的每个项目上执行操作都更加清晰-这就是它的用途。
Enumerable.Range('A', ('Z' - 'A' + 1)).Select(i => (char)i)
我找到了这个:
foreach(char letter in Enumerable.Range(65, 26).ToList().ConvertAll(delegate(int value) { return (char)value; }))
{
//breakpoint here to confirm
}
同时随机阅读此博客,并认为这是完成任务的有趣方式。