小编Fab*_*nay的帖子

构造函数可访问性C#编译器错误CS0122与CS1729

①在下面的C#代码中,出现了CS1729,但据我所知,CS0122更合适.

namespace A
{
  class Program
  {
    static void Main()
    {
      Test test = new Test(1);
    }
  }
  class Test
  {
    Test(int i) { }
  }
}
Run Code Online (Sandbox Code Playgroud)

CS1729:'A.Test'不包含带有1个参数的构造函数

CS0122:'A.Test.Test(int)由于其保护级别而无法访问'

②在下面的C#代码中,出现CS0122,但据我所知CS1729更合适

namespace A
{
  class Program
  {
    static void Main()
    {
      Test test = new Test();
    }
  }
  class Test
  {
    Test(int i) { }
  }
}   
Run Code Online (Sandbox Code Playgroud)

CS0122:'A.Test.Test(int)由于其保护级别而无法访问'

CS1729:'A.Test'不包含带0参数的构造函数

问题:①和②中交换CS0122和CS1729是否有任何原因或者是这个C#编译器错误?

PS:可以使用Microsoft Visual C#2010编译器版本4.030319.1重现①和②中的错误.

c# constructor protection compiler-errors

30
推荐指数
1
解决办法
1076
查看次数

Decimal.MinValue&Decimal.MaxValue:为什么静态只读而不是const修饰符?

在C#中,MinValue字段是为数字类型定义的:

① 十进制类型的静态只读修饰符(链接到MSDN Libray for .NET 4.5):

public static readonly decimal MinValue
Run Code Online (Sandbox Code Playgroud)

② 所有其他数字类型的const修饰符:

//Integral signed numeric types
public const sbyte MinValue
public const short MinValue
public const int MinValue
public const long MinValue

//Integral unsigned numeric types
public const byte MinValue
public const ushort MinValue
public const uint MinValue
public const ulong MinValue

//Real numeric types
public const float MinValue
public const double MinValue
Run Code Online (Sandbox Code Playgroud)

为什么const修饰符不用于定义Decimal.MinValue字段?

备注:

①同样的问题适用于数值类型MaxValue …

static types const numeric readonly

7
推荐指数
1
解决办法
2172
查看次数

如果Instr函数与命名参数一起使用并且返回值赋值给变量,则VBA编译错误

背景:在VBA中,可以在没有命名参数或使用命名参数的情况下调用" InStrRev "函数.

    'Call without named parameters

     Call InStrRev("AB", "B")                   'No compiler error  
     i = InStrRev("AB", "B")                    'No compiler error

    'Call with named parameters

     Call InStrRev(StringCheck:="AB", StringMatch:="B") 'No compiler error
     i = InStrRev(StringCheck:="AB", StringMatch:="B")  'No compiler error
Run Code Online (Sandbox Code Playgroud)

关注:在VBA中,如果' InStr '函数,编译器返回"Expected:list separator"错误:

  • 用命名参数调用
  • 其返回值分配给变量

    'Call without named parameters
    
     Call InStr("AB", "B")                   'No compiler error  
     i = InStr("AB", "B")                    'No compiler error
    
    'Call with named parameters
    
     Call InStr(String1:="AB", String2:="B") 'No compiler error
     i = InStr(String1:="AB", String2:="B")  'Compiler error : "Expected: …
    Run Code Online (Sandbox Code Playgroud)

vba arguments named list-separator

6
推荐指数
2
解决办法
1499
查看次数

C#jagged array:编译器不能隐式地将类型'char []'转换为'int []'.为什么?

由于C#编译器可以隐式地将类型'char'转换为'int',我预计它也会将类型'char []'隐含地转换为'int []'.

但是,以下代码返回编译时错误CS0029无法将类型'char []'显式转换为'int []'.

int[][] jaggedArray = new int[][]
{
  new[]{'a'},
  new[]{1}
};
Run Code Online (Sandbox Code Playgroud)

是否有技术原因导致无法提供此转换?

c# int jagged-arrays char implicit-conversion

2
推荐指数
1
解决办法
597
查看次数