c# - C# 类型推断有多好?

标签 c# .net type-inference

C# 类型推断有多好?我在某处读到它仅适用于局部变量?它适用于类级别属性吗?对于方法签名?方法返回类型?等等

最佳答案

C# 中有几种主要的类型推断:

  • 隐式类型局部变量:

    • 只针对局部变量
    • 仅当值作为声明的一部分赋值时
    • 值不能为空
    • 值不能是 lambda 表达式、匿名方法或方法组(没有转换)
    • 值的编译时类型用于变量的类型
    • 变量的任何进一步使用仅根据初始声明+赋值确定的类型进行检查;它们对推理本身没有贡献。
  • 泛型方法类型参数推断,即您不在调用泛型方法时指定类型参数,编译器会根据参数计算出它们。

    • 将它用于泛型类型和泛型方法真的很方便
    • 无论如何都非常方便 - 如果没有它,LINQ 将很难或无法使用
    • 如果没有它,匿名类型将毫无用处
    • 非常复杂的规则,甚至规范在一些地方都是错误的
  • Lambda 表达式参数类型推断

    • 编译器尝试根据使用它的上下文计算出 lambda 表达式的参数类型
    • 根据我的经验,通常效果很好
  • 数组类型推断,例如new[] { "Hi", "there"} 而不是 new string[] { "Hi", "there"}

    • 各种小限制,没什么大不了的

我可能忘记了其他一些可能被称为“类型推断”的功能。我怀疑您最感兴趣的是第一个,但其他的可能也与您相关 :)

关于c# - C# 类型推断有多好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/479883/

相关文章:

c# - 如何在 .NET 中调用 DrawThemeTextEx

rust - 在 `as_ref()` 中使用 `assert_eq!()` 时需要类型注解

c# - 如何编写包装类以使用部分泛型类型推断?

java - Android 中 Web API 的异常处理

c# - 需要在 WPF 中开发类似 Scrabble 的游戏的建议

c# - 未经授权的访问异常 : how to wait on input from user. Windows Phone c#

c# - 为什么使用 APM 而不是使用单独的线程?

c# - 如何从静态方法更新控件?

java - 为什么 Java 编译器在构造函数实例化中会丢失对泛型类型的跟踪?

c# - 嵌套和 Elasticsearch -映射