①在下面的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#中,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 …
背景:在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)由于C#编译器可以隐式地将类型'char'转换为'int',我预计它也会将类型'char []'隐含地转换为'int []'.
但是,以下代码返回编译时错误CS0029无法将类型'char []'显式转换为'int []'.
int[][] jaggedArray = new int[][]
{
new[]{'a'},
new[]{1}
};
Run Code Online (Sandbox Code Playgroud)
是否有技术原因导致无法提供此转换?