【问题标题】:Is there is any way to use 'var' keyword against function Parameter?有没有办法对函数参数使用'var'关键字?
【发布时间】:2019-01-01 15:27:13
【问题描述】:

我正在学习 C# 中的泛型。我认为我的问题(..我要问)可能很愚蠢,但有人说“质疑一切”。

所以我刚才在想……

为什么我们不能在函数参数列表中使用'var'关键字?

例如:

动态关键字正在起作用...

【问题讨论】:

  • 简短的回答:因为语言规范是这么说的
  • 只有当编译器可以在编译时找到正确的类型时,您才可以使用var。泛型中的 T 是一种类型,您可以在括号 (<>) 中定义用于参数或返回值的类型。
  • var 是通用变量类型,但您不能将其用作参数或返回类型。而是使用对象。
  • dynamicvar 没有真正的关系。我建议您从标准文档中多阅读这些关键字。

标签: c#


【解决方案1】:

C# 中的 var 与其他语言中的 var 非常不同。

重要的是要理解 var 关键字并不意味着“变体”,也不表示变量是松散类型或后期绑定的。它只是意味着编译器确定并分配最合适的类型。

您不能为 var 变量分配 null,因为在这种情况下编译器将无法理解该类型。

同样,如果您无法从方法返回 VAR 或无法将方法参数声明为 Var,因为 C# 编译器将无法在编译时定义这些东西的类型。

请参考https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed-local-variables

【讨论】:

    【解决方案2】:

    var 与泛型无关。它有两个用途:

    首先是声明一个anonymous type 的实例。由于是匿名的,var 是声明变量的唯一方式。

    第二个是快捷方式。它节省了您编写需要声明的类型名称的工作。但是,编译器必须能够根据您分配给变量的值来确定类型。

    official documentation 中查看更多信息。

    【讨论】:

    • 您可以将匿名类型变量声明为object(因为它们隐式派生了它)-var 不是唯一的方法
    • @UnholySheep 是的,但是你失去了对匿名类型中定义的所有成员的访问权限,因此基本上没有达到目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多