相关疑难解决方法(0)

为什么我可以将1作为短路,而不是int变量i?

为什么第一个和第二个写入工作但不是最后一个?有没有办法我可以允许所有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# int compiler-errors type-conversion implicit-conversion

147
推荐指数
4
解决办法
5996
查看次数

为什么C#在两个int数组语法中表现不同

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# arrays

69
推荐指数
3
解决办法
2261
查看次数

在C#中为0x80000000 == 2147483648但在VB.NET中没有

在C#中:

0x80000000==2147483648 //outputs True
Run Code Online (Sandbox Code Playgroud)

在VB.NET中:

&H80000000=2147483648 'outputs False
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

.net c# vb.net hex

5
推荐指数
2
解决办法
1593
查看次数