Сообщение Re: Что-то я не понимаю. C# 7 доступен в VS 2015? от 08.03.2017 23:19
Изменено 08.03.2017 23:23 VladD2
VD>Разве это не фичи 7-го Шарпа?
Проверил работу локальных функций:
static string ToText(string text)
{
if (!text.StartsWith("<hint>", StringComparison.InvariantCultureIgnoreCase))
return text;
void XmlToString(StringBuilder builder, XContainer container)
{
foreach (var n in container.Nodes())
{
switch (n)
{
case XElement e when e.Name == "br" || e.Name == "bl": builder.AppendLine(); break;
case XContainer c: XmlToString(builder, c); break;
case XText t: builder.Append(t.Value); break;
}
}
}
var sb = new StringBuilder();
XmlToString(sb, XElement.Parse(text));
return sb.ToString();
}
Работают. Но вывода типов для них нет, по сему типы параметров надо указывать всегда. Лажает Майкрософт. До Немерла 2006-го не дотягивают.
А с кортежами проблема:
(int x, string y) foo()
{
return (42, "yaho!");
}
Пишет:
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(209,16,209,29): error CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(207,7,207,24): error CS8137: Cannot define a class or member that utilizes tuples because the compiler required type 'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be found. Are you missing a reference?
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(207,7,207,24): error CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported
то есть нужна какая-то дополнительная либа...
Ага. С этим тоже разобрался. Надо было поставить NuGet-пакет System.ValueTuple.
return ref тоже пашет:
ref int foo(int[] ary)
{
return ref ary[2];
}
var ary2 = new[] { 2, 4, 6, 8 };
foo(ary2) = 42;
Синарные константы работают (хотя и не особо нужны):
const int X = 0b010_1010;
Рекорды не пашут. Но вроде их не осилили.
В общем, осталось понять как C# 7 попал на мою машину.
VD>Разве это не фичи 7-го Шарпа?
Проверил работу локальных функций:
static string ToText(string text)
{
if (!text.StartsWith("<hint>", StringComparison.InvariantCultureIgnoreCase))
return text;
void XmlToString(StringBuilder builder, XContainer container)
{
foreach (var n in container.Nodes())
{
switch (n)
{
case XElement e when e.Name == "br" || e.Name == "bl": builder.AppendLine(); break;
case XContainer c: XmlToString(builder, c); break;
case XText t: builder.Append(t.Value); break;
}
}
}
var sb = new StringBuilder();
XmlToString(sb, XElement.Parse(text));
return sb.ToString();
}
Работают. Но вывода типов для них нет, по сему типы параметров надо указывать всегда. Лажает Майкрософт. До Немерла 2006-го не дотягивают.
А с кортежами проблема:
(int x, string y) foo()
{
return (42, "yaho!");
}
Пишет:
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(209,16,209,29): error CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(207,7,207,24): error CS8137: Cannot define a class or member that utilizes tuples because the compiler required type 'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be found. Are you missing a reference?
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(207,7,207,24): error CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported
то есть нужна какая-то дополнительная либа...
Ага. С этим тоже разобрался. Надо было поставить NuGet-пакет System.ValueTuple.
return ref тоже пашет:
ref int foo(int[] ary)
{
return ref ary[2];
}
var ary2 = new[] { 2, 4, 6, 8 };
foo(ary2) = 42;
Бинарные константы работают (хотя и не особо нужны):
const int X = 0b010_1010;
Рекорды не пашут. Но вроде их не осилили.
В общем, осталось понять как C# 7 попал на мою машину.