Оператор .? и net 4
От: .alex Ниоткуда  
Дата: 01.09.24 14:02
Оценка:
Добрый день. Только разбираюсь с c# поэтому такой вопрос. На старом компе на котором есть только net 3.5 b 4.0.3019 надо запустить код который использует оператор ?. для того чтобы обращение к несуществующему объекту не выкидывало исключение, а возвращало просто null.
Код например такой:
using System;
class test
{
    public static void Main(string[] args)
    {

        try
        {
            string s = null;
            Console.WriteLine("len: " + s?.Length);
        }
        catch (Exception e)
        {
            Console.WriteLine("Error : " + e.Message);
        }
    }
}

Этот код нормально компилится в VS2019 с target framework: .NET Framework4...
А если же я пытаюсь его скомпилить через командную строку:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe main.cs

то выводятся ошибки:

main.cs(20,34): error CS1525: Недопустимый терм "." в выражении
main.cs(20,35): error CS1003: Синтаксическая ошибка, ожидалось ":"
main.cs(20,41): error CS1002: ожидалась ;
main.cs(20,41): error CS1525: Недопустимый терм ")" в выражении

Я как понимаю csc.exe ругается как раз на оператор ?.
Так почему в студии я могу его использовать а csc.exe — нет?
Re: Оператор .? и net 4
От: karbofos42 Россия  
Дата: 01.09.24 15:37
Оценка: 1 (1)
Здравствуйте, .alex, Вы писали:

A>Так почему в студии я могу его использовать а csc.exe — нет?


Потому что в указанной папке лежит старый компилятор, который умеет только C# версии 5, а указанный оператор появился в C# 6 или позже.
У студии где-то в её папках лежит более свежий компилятор, который уже умеет всё это и нужно его использовать.
Re[2]: Оператор .? и net 4
От: .alex Ниоткуда  
Дата: 01.09.24 18:54
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Здравствуйте, .alex, Вы писали:


A>>Так почему в студии я могу его использовать а csc.exe — нет?


K>Потому что в указанной папке лежит старый компилятор, который умеет только C# версии 5, а указанный оператор появился в C# 6 или позже.

K>У студии где-то в её папках лежит более свежий компилятор, который уже умеет всё это и нужно его использовать.
Понял, спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.