为什么第一个和第二个写入工作但不是最后一个?有没有办法我可以允许所有3个并检测它是1,(int)1还是我传入?真的为什么一个允许但最后一个?第二个被允许但不是最后一个真的让我大吃一惊.
using System;
class Program
{
public static void Write(short v) { }
static void Main(string[] args)
{
Write(1);//ok
Write((int)1);//ok
int i=1;
Write(i);//error!?
}
}
Run Code Online (Sandbox Code Playgroud) C#中的数组是隐式引用类型的共变体:
object[] listString = new string[] { "string1", "string2" };
Run Code Online (Sandbox Code Playgroud)
但不是值类型,所以如果你string改为int,你会得到编译错误:
object[] listInt = new int[] {0, 1}; // compile error
Run Code Online (Sandbox Code Playgroud)
现在,值得关注的是,当您声明int数组时,如下面的两个语法没有显式声明类型int,只是区分开来new[],编译器会区别对待:
object[] list1 = { 0, 1 }; //compile successfully
object[] list2 = new[] {0, 1}; //compile error
Run Code Online (Sandbox Code Playgroud)
您将object[] list1 = { 0, 1 };成功编译,但object[] list2= new[] {0, 1};编译错误.
似乎C#编译器对待
object[] list1 = { 0, 1 };
Run Code Online (Sandbox Code Playgroud)
如
object[] list1 = new object[]{ …Run Code Online (Sandbox Code Playgroud) 在C#中:
0x80000000==2147483648 //outputs True
Run Code Online (Sandbox Code Playgroud)
在VB.NET中:
&H80000000=2147483648 'outputs False
Run Code Online (Sandbox Code Playgroud)
这怎么可能?