这是如何编译的?c#

这是如何编译的?c#,c#,compilation,C#,Compilation,这是如何编译的?这似乎令人困惑 看来应该是这样 object obj = new object[] { new object(), new object() }; 或 对象是一切的基础。任何东西都可以分配给object类型的变量。objectobj=。。。这里可以参考一个集合。这里并没有说“object”的不同用法指的是同一类型的对象。一个对象数组就是一个对象,但这确实很奇怪。 object[] obj = { new object(), new object() }; 右侧部分确实生成类型

这是如何编译的?这似乎令人困惑

看来应该是这样

object obj = new object[] { new object(), new object() };


对象是一切的基础。任何东西都可以分配给object类型的变量。

objectobj=。。。这里可以参考一个集合。这里并没有说“object”的不同用法指的是同一类型的对象。

一个对象数组就是一个对象,但这确实很奇怪。

object[] obj = { new object(), new object() };
右侧部分确实生成类型为
object[]
的引用,但该类型与任何其他类型一样,与它编译的
object

是赋值兼容的,因为“对象”可以是任何对象,因此它可以是对象数组的引用。下面的代码使用字符串使区别更加清晰,可能会有所帮助。因此:

object obj = new object[] { ...}
List myStrings=new List(){“aa”,“bb”};
//现在我们有了一个字符串数组,尽管是空的
字符串[]myStringsArray=myStrings.ToArray();
//仍然是对myStringsArray的引用,只是以对象的形式保存
object stillMyStringsArray=(object)myStringsArray;
//获取另一个字符串数组并以对象的形式保留
字符串[]另一个数组=myStrings.ToArray();
object anotherArrayAsObject=(object)anotherArray;
//以对象的形式将两个对象存储在对象数组中
object mystringrays=新对象[]{stillMyStringsArray,另一个arrayasObject};
//将myStringArrays对象转换回对象数组,并获取数组中的第一项
对象myOriginalStringsArrayAsObject=((对象[])mystringrays)[0];
//将第一个数组项转换回字符串数组
字符串[]myOriginalStringsArray=(字符串[])myOriginalStringsArray对象;

本质上,对象始终可以是对任何对象的引用,甚至是对象数组。对象不关心放入其中的内容,因此在代码的最后,我们得到了一个字符串数组。在VisualStudio中运行该代码,在中删除一些断点,然后继续执行。希望它能帮助您理解为什么您指定的代码是有效的=)

它可以编译,因为您总是可以声明类型为
object
的变量,并在右边用您喜欢的任何东西初始化它。如果它是值类型,它将被装箱。对象是C#的空指针。它可能指向任何东西,对我来说一点也不奇怪。是C#
object obj = new object[] { ...}
List<string> myStrings = new List<string>() { "aa", "bb" };
// Now we have an array of strings, albeit an empty one
string[] myStringsArray = myStrings.ToArray();
// Still a reference to myStringsArray, just held in the form of an object
object stillMyStringsArray = (object)myStringsArray;

// Get another array of strings and hold in the form of an object
string[] anotherArray = myStrings.ToArray();
object anotherArrayAsObject = (object)anotherArray;

// Store both our objects in an array of object, in the form of an object
object myStringArrays = new object[] { stillMyStringsArray, anotherArrayAsObject };

// Convert myStringArrays object back to an array of object and take the first item in the array
object myOriginalStringsArrayAsObject = ((object[])myStringArrays)[0];
// Conver that first array item back into an array of strings
string[] myOriginalStringsArray = (string[])myOriginalStringsArrayAsObject;