Действительно ли возможно создать новый оператор в c#?

Если в этом TextView атрибуты высоты / ширины не установлены на wrap_content, просто используйте android:gravity="center". Но некоторые люди жалуются, что использование этого не работает. Это потому, что их расположение не имеет такой же силы тяжести. Вы можете установить

android:layout_gravity="center" В ТЕКСТ.] (это будет применяться только к TextView)

или

android:gravity="center" IN РАСПИСАНИЕ РОДИТЕЛЕЙ (это будет применяться ко всем представлениям внутри него)

59
задан Aaron Palmer 24 June 2009 в 18:32
поделиться

5 ответов

Нет, это невозможно. Вместо этого вам нужно будет создать метод

39
ответ дан 24 November 2019 в 18:26
поделиться

Как уже говорилось в других ответах, вы не можете создать новый оператор - по крайней мере, не без изменения лексера и синтаксического анализатора, которые построены в компилятор. По сути, компилятор построен так, чтобы распознавать отдельный символ, например < или ? , или пару, например >> или <= , является оператором и обращаться с ним особым образом; он знает, что i <5 - это, например, выражение, а не имя переменной. Распознавание оператора как оператора - это процесс, отдельный от принятия решения о том, что оператор на самом деле делает, и он гораздо более тесно интегрирован в компилятор, поэтому вы можете настроить последний, но не первый.

Для языков, в которых есть компилятор с открытым исходным кодом (например, GCC), теоретически можно модифицировать компилятор для распознавания нового оператора. Но это будет непросто, к тому же каждому понадобится ваш собственный компилятор для использования вашего кода.

17
ответ дан 24 November 2019 в 18:26
поделиться

Вы не только не можете этого сделать, но и зачем вам это нужно?

Я не уверен, к какому типу относятся ваши y и z, но если они имеют числовой тип значения , вы, вероятно, могли бы использовать:

var x = Math.Min(y, z);

Хотя лично я все же предпочел бы:

var x = (y < z) ? y : z;

Но я немного? : junky.

Хороший код не только жесткий и эффективный, но и читаемый. Даже если вы единственный, кто это читал, вы однажды вернетесь к этому оператору и задаетесь вопросом, что, черт возьми, он сделал.

5
ответ дан 24 November 2019 в 18:26
поделиться

Нет, но вы можете создать методы расширения вместо этого

y.MethodName(z)
5
ответ дан 24 November 2019 в 18:26
поделиться

Нет, но вы можете перегрузить некоторые существующие операторы в C #.

В некоторые другие языки, например F #, вы можете использовать:

let (<?) = min
31
ответ дан 24 November 2019 в 18:26
поделиться
Другие вопросы по тегам:

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