【问题标题】:Why can’t I implicitly convert with var?为什么我不能用 var 隐式转换?
【发布时间】:2019-11-13 10:09:35
【问题描述】:

(我的问题参考下面写的代码)

为什么我不能将 int[] 类型隐式转换为 var[]?我知道你不能隐式分配 var 和 const。但为什么?编译器实际上是在告诉我“不能将 int[] 类型隐式转换为 var[]。”

如果计算机已经知道我的意图,他们为什么不去做呢?未来的 IDE、编译器、Visual Studio(不知道该用哪一个)有一天会自动为你在 C# 中转换它吗?或者有什么原因你不能转换它?希望我能了解原因

class Program
{
    static void Main(string[] args)
    {
        var[ ] a = new int[10];
        for (int k = 0; k < 10; k++) {
            a[k] = k*2;
        }
        foreach (int k in a) {
            Console.WriteLine(k);
        }
    }
}

(代码源sololearn)

我的最后一个问题只是好奇。 (如上面的例子)日常编程看起来与教科书有很大不同吗?我知道教科书对于学习理论和理解至关重要。

【问题讨论】:

  • 只要做 var a = new int[10]
  • var[] 在 C# 中不是一个东西。只需var 即可。
  • var 不是类型,您只需让编译器推断它代表什么真实类型。如果结论不可能或不是唯一的,它会告诉你。 var 数组没有意义。它更像是一种语法,一种预处理器。
  • 谢谢大家。我想语法很重要。 :)

标签: c# constants var implicit-conversion


【解决方案1】:

var 是关键字,而不是类型,因此您不能有 var 的数组。

var 关键字简化了代码,让您无需声明特定数据类型,而是让编译器从变量赋值中推断出来。

因此,var[ ] a = new int[10]; 应该简单地更改为 var a = new int[10];

【讨论】:

    【解决方案2】:

    您所说的错误实际上是 次要 错误。 主要的错误是:

    找不到类型或命名空间名称“var”

    假设您使用 var 作为类型,就像您使用 intshort 等一样。

    正确的语法是:

    var a = new int[10];
    

    这与您的代码配合得很好。

    【讨论】:

    • 非常感谢。我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2010-10-07
    • 2022-01-06
    • 2016-03-07
    相关资源
    最近更新 更多