Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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# 有可能在C中创建一种新类型的循环吗?_C#_Loops - Fatal编程技术网

C# 有可能在C中创建一种新类型的循环吗?

C# 有可能在C中创建一种新类型的循环吗?,c#,loops,C#,Loops,这个问题更多的是出于好奇,而不是出于实际需要,所以您不必提出实现这些示例的其他方法,但我想知道:是否有可能在C中创建一种新类型的循环 我能想到几个例子: repeat(5) { // This will repeat 5 times, equivalent to "for(int i=0; i<5; i++)" } foreachBackwards(GameObject entry in list) { // This is like a foreach loop, b

这个问题更多的是出于好奇,而不是出于实际需要,所以您不必提出实现这些示例的其他方法,但我想知道:是否有可能在C中创建一种新类型的循环

我能想到几个例子:

repeat(5) {
    // This will repeat 5 times, equivalent to "for(int i=0; i<5; i++)"
} 

foreachBackwards(GameObject entry in list) {
    // This is like a foreach loop, but it goes in reverse
}

maxwhile(Method() == false; 100) {
    // This will act like a normal While loop, but will auto-break after 100 attempts
}

我知道可以通过向现有的for/while循环类型添加内部逻辑来完成所有这些事情,但我只是想知道,这种事情可能吗?或者,预构建的循环是您可以使用的唯一类型吗?

在我看来,所有这些在LINQ中都是可能的

foreach (var i in Enumerable.Range(0, 5))
{
    // This will repeat 5 times, equivalent to "for(int i=0; i<5; i++)"
}

foreach (GameObject entry in list.AsEnumerable().Reverse())
{
    // This is like a foreach loop, but it goes in reverse
}

foreach (var i in Enumerable.Range(0, 100).TakeWhile(x => Method() == false))
{
    // This will act like a normal While loop, but will auto-break after 100 attempts
}
注意:如果列表是一个列表,则需要.AsEnumerable,否则就不需要了


LINQ将允许您通过组合创建各种循环变体。

是的,使用Roslyn扩展,您可以以任何方式扩展C—但需要定义语法、语义、流分析、与现有静态分析toosl的兼容性等,这需要大量工作,尽管您甚至可以让VS识别您的新语法。但是总的来说:当有完美的内置插件时,引入新的语法只是在自找麻烦,然后考虑你的继任者在你离开后必须维护这个项目。呃,仅仅12分钟后,我已经有了两张下注,仅仅用一个例子来发布一个清晰简洁的代码集中的问题,我就失去了4的声誉。现在我记得为什么我不再使用StackOverflow了!我想在一小时内,它将作为一个无关问题的复制品关闭。谢谢@Dai真正回答了这个问题。请随便把它作为答案贴出来,我会接受的。我完全明白这不是一个好主意,就像我说的,我只是好奇这是否可能,因为我以前从未见过有人这样做。正如我所说的,我没有寻找其他方法来实现这一点,我知道如何复制这种功能。我在问是否有可能创建新类型的循环,特别是作为增加我自己编程知识的一种方式。对不起,这是对新类型循环的回答。您是否希望创建循环时有隐藏的语法?除了我的答案之外,你还期望你的问题得到什么样的回答?我期望要么是可能的,要么是不可能的。我个人可能不知道一些东西,但不会被隐藏。您的回答描述了如何使用foreach循环完成许多事情,但我想问的是,是否可以完全不使用foreach循环,而是定义一种新的循环类型,就像我们可以定义全新的结构和类一样。@Nerrolken-将Enumerable.Range0,5.ForEachi=>。。。;“更像你在寻找的东西吗?”内罗尔肯-那么戴在评论中的建议可能是最好的选择。你可以用Roslyn编写任何代码,但最终会生成非标准C。