为什么在此示例代码中没有出现语法错误?

马捷·波克妮

只需尝试使用C#Lookup集合的一些基础知识,就会发现,这个简单的示例可以很好地编译,即使IGrouping接口也应将TElement设置为int。

string txt = "Hello world!";
ILookup<char, int> occurrences = Enumerable.Range(0, txt.Length).ToLookup(i => txt[i], i => i);

foreach (IGrouping<char, string> values in occurrences)
    Console.WriteLine($"{values.Key}: {string.Join(", ", values)}");

显然,我在无效类型转换时遇到运行时错误。但是我希望这对编译器有用...

雷扎·阿盖伊(Reza Aghaei)

似乎这是编译器使用的规则:

如果编译器发现值类型或密封类未实现或继承程序员尝试转换为的类型或从其继承的类型,则该转换在编译时是非法的。

(感谢捷普·斯蒂格·尼尔森(Jeppe Stig Nielsen)在评论中提到了这一点。)

foreach (XXXX values in occurrences)如果您使用以下任一选项而不是XXXX示例这是编译的结果注意occurrencesILookup<char, int>从派生的类型IGrouping<char, int>

  • public class MyClass { } 编译方式
  • public sealed class MyClass { } 编译时错误
  • public sealed class MyClass : IGrouping<char, int> {...} 编译方式
  • public sealed class MyClass : IGrouping<char, string> {...} 编译时错误
  • public struct MyStruct {} 编译时错误
  • public struct MyStruct : IGrouping<char, string> {...} 编译时错误
  • public struct MyStruct : IGrouping<char, int> {...} 编译方式

这是Krzysztof Cwalina撰写的一篇不错的博客文章,描述了Duck键入在foreach中的使用方式:

C#的foreach运算符已使用鸭子类型。这对于某些人来说可能是令人惊讶的,但是要在C#中支持foreach,则无需实现IEnumerable您要做的就是:

提供一个GetEnumerator不带任何参数并返回具有两个成员的类型的公共方法:a)MoveMext不带参数并返回一个布尔值的方法,以及b)一个Current具有getter的属性,该方法返回一个Object。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在此过程中出现语法错误

来自分类Dev

当没有语法错误,或runetime错误为什么不会这行代码执行

来自分类Dev

为什么我在此代码中收到“您的 SQL 语法有错误”错误?

来自分类Dev

为什么Dreamweaver在此脚本行中显示语法错误?

来自分类Dev

为什么在此python代码中没有显示输出?

来自分类Dev

为什么宏在脚本中没有逻辑或语法错误的情况下给出编译错误?

来自分类Dev

为什么在此示例中出现错误C2797?

来自分类Dev

没有语法错误,仍然没有代码

来自分类Dev

Access 2013:为什么会出现此语法错误?

来自分类Dev

为什么在INSERT INTO语句中出现语法错误?

来自分类Dev

为什么会出现语法错误:缺少';' 在“ *”之前

来自分类Dev

为什么在返回行上出现语法错误?

来自分类Dev

为什么在$ in命令中出现语法错误?

来自分类Dev

为什么使用exec()会出现语法错误?

来自分类Dev

为什么在使用串联时出现语法错误?

来自分类Dev

为什么会出现“ INSERT INTO语句中的语法错误”?

来自分类Dev

为什么在“ list.sort()”中出现语法错误

来自分类Dev

为什么我的哈希始终出现语法错误?

来自分类Dev

为什么此CMD脚本出现语法错误?

来自分类Dev

为什么在使用Eclipse的python中出现语法错误?

来自分类Dev

为什么在group by时出现语法错误?

来自分类Dev

为什么重启后会出现语法错误?

来自分类Dev

为什么在 elif 语句中出现语法错误?

来自分类Dev

为什么我在 LAG() 函数中出现语法错误?

来自分类Dev

为什么在此示例代码中不需要 readSync?

来自分类Dev

在此示例中,为什么没有占位符的std :: bind无法正常工作(成员函数)?

来自分类Dev

我不知道为什么这段代码中有语法错误

来自分类Dev

如果我的代码中没有“ static”,为什么会出现错误CS0120?

来自分类Dev

无法弄清楚为什么R中的sqldf出现“ from”附近的语法错误

Related 相关文章

  1. 1

    为什么在此过程中出现语法错误

  2. 2

    当没有语法错误,或runetime错误为什么不会这行代码执行

  3. 3

    为什么我在此代码中收到“您的 SQL 语法有错误”错误?

  4. 4

    为什么Dreamweaver在此脚本行中显示语法错误?

  5. 5

    为什么在此python代码中没有显示输出?

  6. 6

    为什么宏在脚本中没有逻辑或语法错误的情况下给出编译错误?

  7. 7

    为什么在此示例中出现错误C2797?

  8. 8

    没有语法错误,仍然没有代码

  9. 9

    Access 2013:为什么会出现此语法错误?

  10. 10

    为什么在INSERT INTO语句中出现语法错误?

  11. 11

    为什么会出现语法错误:缺少';' 在“ *”之前

  12. 12

    为什么在返回行上出现语法错误?

  13. 13

    为什么在$ in命令中出现语法错误?

  14. 14

    为什么使用exec()会出现语法错误?

  15. 15

    为什么在使用串联时出现语法错误?

  16. 16

    为什么会出现“ INSERT INTO语句中的语法错误”?

  17. 17

    为什么在“ list.sort()”中出现语法错误

  18. 18

    为什么我的哈希始终出现语法错误?

  19. 19

    为什么此CMD脚本出现语法错误?

  20. 20

    为什么在使用Eclipse的python中出现语法错误?

  21. 21

    为什么在group by时出现语法错误?

  22. 22

    为什么重启后会出现语法错误?

  23. 23

    为什么在 elif 语句中出现语法错误?

  24. 24

    为什么我在 LAG() 函数中出现语法错误?

  25. 25

    为什么在此示例代码中不需要 readSync?

  26. 26

    在此示例中,为什么没有占位符的std :: bind无法正常工作(成员函数)?

  27. 27

    我不知道为什么这段代码中有语法错误

  28. 28

    如果我的代码中没有“ static”,为什么会出现错误CS0120?

  29. 29

    无法弄清楚为什么R中的sqldf出现“ from”附近的语法错误

热门标签

归档