Пропавшие без вести 'с' ключевым словом в C# [дубликат]

Ошибка импорта модуля ... Я думаю, это потому, что вы на самом деле не запускали venv до запуска gunicon, поскольку вы делаете это прямо из служебного файла. Вы можете написать bash-файл с некоторыми командами, чтобы включить venv перед запуском gunicorn, чтобы он работал внутри него. Посмотрите на эту статью:

http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/

С уважением.

26
задан Community 23 May 2017 в 12:02
поделиться

6 ответов

Это - то, что должен сказать диспетчер программ C#: , Почему не делает C#, имеют 'с' оператором?

  • Небольшие или несуществующие преимущества удобочитаемости. Мы думали, что преимущества удобочитаемости были небольшими или не существовали. Я не пойду насколько сказать, что с оператором делает код менее читаемым, но некоторые люди, вероятно, было бы.

  • Увеличенная сложность языка. Добавление с оператором сделало бы язык более сложным. Например, VB должен был добавить новый синтаксис языка для обращения к потенциальной неоднозначности между локальной переменной (текст) и свойством на "с" целью (.Text). Другие способы решить эту проблему также представляют сложность языка. Другой подход должен продвинуть объем и заставить свойство скрыть локальную переменную, но тогда нет никакого способа относиться к локальному, не добавляя некоторый синтаксис Escape.

  • наследие C++. C++ никогда не имел с оператором, и отсутствие такого оператора, как обычно думают, не является проблемой разработчиками C++. Кроме того, мы не чувствовали, что другие изменения - изменяются в виде людей кода, пишут, изменения в платформе, другие изменения на языке, и т.д. - сделанный с более необходимыми операторами.

24
ответ дан Rob Kennedy 28 November 2019 в 06:48
поделиться

В C# 3.0 можно использовать объектные инициализаторы для достижения подобного эффекта при создании объектов.

var control = new MyControl
{
    Title = "title",
    SomeEvent += handler,
    SomeProperty = foo,
    Another = bar
};

, А не:

var control = new MyControl();
control.Title = "title";
control.SomeEvent += handler;
control.SomeProperty = foo;
control.Another = bar;

Примечание, что, хотя этот синтаксис был представлен в C# 3.0, можно все еще использовать его с 2,0 платформами, это - просто синтаксический сахар, представленный компилятором.

15
ответ дан Matthew Olenik 28 November 2019 в 06:48
поделиться

Это не идиоматический c#, но если Вы действительно хотите with эквивалентный, Вы могли бы сделать это:

Person MyPersonWithALongName = new Person();
MyUtils.With(MyPersonWithALongName, p => {

    p.Name = "George";
    p.Address = "123 Main St";
    ...

});

class MyUtils {

    public static void With<T>(T x, Action<T> do) {
        do(x);
    }
}

Обновление:
мне пришло в голову, что Вы могли тривиально сделать это более кратким путем превращения его в дополнительный метод, возможно, переименования его "Псевдоним" или "Как" для reabability:

MyPersonWithALongName.Alias(p => {
    p.Name = "George";
    p.Address = "123 Main St";
    ...
});
10
ответ дан Gabe Moothart 28 November 2019 в 06:48
поделиться

Нет, "с" ключевым словом был намеренно упущен из языка.

, Если у Вас есть длинное название ссылки, можно легко сделать более короткую ссылку на нее с помощью переменной и даже дать ей ограниченный объем:

{
   SomeClass r = Some.Lengthy.Path.To.Get.To.A.Referece;
   r.Some = 42;
   r.Properites = "none";
   r.To = 1;
   r.Set = null;
}
8
ответ дан Guffa 28 November 2019 в 06:48
поделиться

Нет, это было сознательное решение, принятое командой разработчиков C#. Люди смешали чувства о 'с' ключевым словом, потому что оно может ухудшить удобочитаемость кода, если злоупотреблено (вложенный with's).

0
ответ дан Ed S. 28 November 2019 в 06:48
поделиться

Я не предполагаю, что существует техническая причина, она не существует. Что я сказал бы, хотя, то, что причина, что это не существует, состоит в том, что это - конструкция программирования, которая существует только в целях сокращения ввода. С вещами как intellisense, и копией и вставкой, мир действительно не имеет большого спроса на функции как это больше. Я использую VB.Net и не могу вспомнить, поддерживается ли он даже все еще. Никогда действительно чувствовавший потребность использовать его.

0
ответ дан Kibbee 28 November 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: