【问题标题】:var vs Object in C# [duplicate]C#中的var vs Object [重复]
【发布时间】:2011-03-14 08:46:40
【问题描述】:

可能重复:
Difference between “var” and “object” in C#

我想知道var和object的区别。

何时使用 Var,何时使用 Object。

使用它们的优点和缺点。

【问题讨论】:

标签: c#


【解决方案1】:

var 只是“让编译器为我选择正确的变量类型”的简写(编译时类型推断是更准确的术语)。

另一方面,object 是一个特定类型;所有其他引用类型都派生自object,因此您可以将任何内容分配给object 类型的变量。

【讨论】:

  • 除非它是一个原语,在这种情况下,它必须在被分配到 Object 引用之前被装箱。
  • 我认为应该添加到所选答案中的内容是,如果您使用 var 那么正如@Ben Voigt 所说,您可以对存储在 var 中的对象执行操作而无需必须投射它。
【解决方案2】:

var 是您发现自己问的答案,我真的需要输入两次长类型名称吗,例如:

Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>> myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();

为什么没有朋友,你没有。请改用var

var myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();

现在myDict 真的是Dictionary&lt;string, Func&lt;List&lt;Func&lt;int, int, double&gt;&gt;, IEnumerable&lt;Tuple&lt;double, string&gt;&gt;&gt;&gt;,所以你可以向它添加东西,枚举它等等。

如果您将其声明为object,您将无法对它执行Dictionary 提供的任何操作,只有对所有对象有效的操作。

【讨论】:

  • 我很想看到该代码在运行中。
  • 您的计算机运行 Windows? j/k。我编造了那个特定类型,但我非常努力地尝试使用实际上可能组合在一起的类型。
  • 这一定是有史以来最讨厌的代码 sn-p :)
  • 也是最做作的......虽然有点夸张,但也不是很夸张。
  • 我认为我做过的最糟糕的是 Dictionary>>,但如果我没记错的话,它是一次构建和消耗的,所以我没有一次看到所有这些。
【解决方案3】:

var 仍然是强类型的,但使用 object 你将不得不强制转换所有内容。

【讨论】:

    【解决方案4】:
    var foo = "Hello, I am a string!";
    // foo is a string, so this compiles
    var fooCharArray = foo.ToCharArray(); 
    
    object bar = foo;
    // bar is not a string, so this does not compile
    var barCharArray = bar.ToCharArray();
    

    在第一个示例中,编译器知道foo 是一个字符串,因此我们可以在foo 上调用字符串方法。

    在第二个示例中,我们将字符串foo“向上转换”到一个对象。现在编译器不知道(因为它不应该知道!)bar 实际上是一个字符串,我们不能在bar 上调用字符串方法。编译器不允许从对象(或任何基类型)隐式向下转换为派生类型(例如System.String)。它是编译时类型安全规则的一部分。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2010-12-05
      • 2015-08-08
      • 2014-11-16
      • 2018-06-08
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 2011-05-28
      相关资源
      最近更新 更多