使用不同数字数据类型重载

时间:2015-05-08 14:00:55

标签: c#

假设我有一个带有2个签名的方法:

void Foo(int a);
void Foo(long a, string s = null);

如果我这样调用Foo

Foo(1);

它似乎是两个中的第一个。是因为默认情况下直接作为参数传递的数字被视为int32吗?这是指定的位置?

2 个答案:

答案 0 :(得分:6)

C#5.0规范的第2.4.4.2节(整数文字)说明:

整数文字的类型确定如下:

  • 如果文字没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,uint,long,ulong。
  • 如果文字后缀为U或u,则它具有第一种类型,其值可以表示为:uint,ulong。
  • 如果文字后缀为L或l,则它具有第一种类型,其值可以表示为:long,ulong。
  • 如果文字后缀为UL,U1,uL,ul,LU,Lu,lU或lu,则为ulong类型。

因此,第一个项目符号适用于您的案例,因为您没有后缀,1符合列表中的第一项int,因此整数文字1属于输入int

答案 1 :(得分:3)

默认情况下,字面值1默认为intInt32)。如果要显式调用采用long的版本,请确保传递long值,例如:

Foo(1L);

Servey's answer能够很好地解释为什么