相关疑难解决方法(0)

我在哪里可以找到C#5语言规范?

C#5.0自2012年8月开始推出.我在哪里可以找到规格?他们已经停止了ECMA规范,但MSDN怎么样?

c# language-specifications c#-5.0

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

插值字符串的原始类型是什么?

MSDN 文档包含有关隐式转换的部分:

var s = $"hello, {name}";
System.IFormattable s = $"Hello, {name}";
System.FormattableString s = $"Hello, {name}";
Run Code Online (Sandbox Code Playgroud)

从第一个字符串开始,原始类型的插值字符串就是string.好的,我可以理解它,但是......我意识到字符串没有实现IFormattable.所以它看起来像编译器的一些魔法类似于它对lambdas的作用.

现在猜猜这段代码的输出:

void Main()
{
    PrintMe("Hello World");
    PrintMe($"{ "Hello World"}");
}

void PrintMe(object message)
{
    Console.WriteLine("I am a " + message.GetType().FullName);
}

//void PrintMe(string message)
//{
//  Console.WriteLine("I am a string " + message.GetType().FullName);
//}

void PrintMe(IFormattable message)
{
    Console.WriteLine("I am a " + message.GetType().FullName);
}
Run Code Online (Sandbox Code Playgroud)

暗示:

我是System.String
我是System.Runtime.CompilerServices.FormattableStringFactory + ConcreteFormattableString

如果您从第二种方法中删除评论,您将获得:

我是一个字符串System.String
我是一个字符串System.String

好的
我可能不太了解重载分辨率,但是C#规范的 14.4.2 …

c# string overloading type-inference string-interpolation

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

C#6.0或7.0的"C#语言规范"是否已更新?

C#已经是7.0了.但C#语言规范仍然是5.0.

当我GetValueOrDefault()在文档中找不到可以为空的类型时,我意识到规范已经过时了.

我想知道规格是否已经更新,至少是6.0?

c# c#-6.0 c#-7.0

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