Mar*_*off 19
var 只是"让编译器为我选择正确的变量类型"的简写(编译时类型推断是更精确的术语).
object另一方面,是一种特定的类型; 所有其他引用类型派生自object,因此您可以将任何内容分配给类型的变量object.
Ben*_*igt 11
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>>>>();
Run Code Online (Sandbox Code Playgroud)
为什么没有朋友,你没有.var改为使用:
var myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();
Run Code Online (Sandbox Code Playgroud)
现在myDict真的是一个Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>,所以你可以添加东西,枚举它,等等.
如果你声明它,object你不能用它提供的任何操作Dictionary,只有那些对所有对象有效的操作.
小智 5
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();
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,编译器知道这foo是一个字符串,因此我们可以在上调用字符串方法foo。
在第二个示例中,我们将字符串“上载” foo到对象。现在,编译器不知道(因为它不应该知道!)bar实际上是一个字符串,并且我们无法在上调用字符串方法bar。编译器不允许从对象(或任何基本类型)到派生类型(例如System.String)的隐式向下转换。它是编译时类型安全规则的一部分。
| 归档时间: |
|
| 查看次数: |
13257 次 |
| 最近记录: |