Есть ли условный оператор для установки переменной в С# на значение другой переменной, если последняя не равна нулю?

Что-то вроде тройного оператора (? :) или оператора нулевой коалесценции (?). Мне кажется глупым заняться двумя строками и быть настолько многословным, когда существуют другие операторы.

EDIT: Поскольку он запросил, вот два возможных примера того, что я надеюсь, что я могу найти

var variable ?= mightBeNull;

или

var variable = mightBeNull != null ? mightBeNull

Действительно, это либо то, что можно использовать для назначения значения, если оно не равно null, переменной или If без Else, хорошо упакованной в операторе.

5 ответов

Так ты хочешь этого?

if (other != null)
 someVariable = other;

Вы можете сделать следующее, но я бы сказал, что вышеизложенное лучше из-за ясности и возможных побочных эффектов:

someVariable = other ?? someVariable;

Вышеупомянутые могут вызывать побочные эффекты, если someVariable является свойством, и либо get либо set могут вызывать побочные эффекты; это не должно быть важно, если ваше имущество следует обычным рекомендациям. Или, как указывает Servy, даже если это поле, он может создать другую семантику в многопоточном приложении. Следует отметить, что в первом примере вы читаете other дважды, что также может привести к сложности ввода (хотя и меньший потенциал, чем последний пример).


Чтобы присвоить значение переменной только в том случае, если она не является нулевой, вам нужно использовать if. Это не будет делать ни кондиционер, ни оператор с нулевым коалесцентом.

if(somethingElse != null) something = somethingElse;

В С# нет конкретного оператора, который делает именно это.


Готов поспорить, это то, что вы ищете.

Пусть говорят, что у нас есть функция myFunction которая говорит, что аргумент передан input null или нет. Если input равен NULL, он вернет "Input is null!" , иначе он вернет "Input is not null".

Это нормальный подход:

public String myFunction(string input) { 
 if (input == null) 
 return "Input is null!"; 
 else 
 return "Input is not null";
}

И это другой подход (что вы ищете):

public String myFunction(string input) {
 String result;

 // this is what you are looking for
 result = (input == null) ? "Input is null!" : "Input is not null";

 return result;
}

Он называется (?: Условный оператор).


В Visual Studio 2015 С# есть новый оператор, называемый Null-Conditional, который делает то, что вы просите. Это?. или? оператор.

int? length = customers?.Length; // null if customers is null 
Customer first = customers?[0]; // null if customers is null
int? count = customers?[0]?.Orders?.Count(); // null if customers, the first customer, or Orders is null

В настоящее время можно использовать в предыдущих версиях С#, но не для оператора, а для одного лайнера использовать? : оператор ?: оператор

condition ? first_expression : second_expression;
AssingningTO = (someVar == null) ? null: someVar; // if null assign null ELSE assign someVar
AssingningTO = (someVar == null) ? String.Empth(): someVar; // if null assign empty string else someVar


Nullable types может представлять все значения базового типа и дополнительное значение null.

http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

licensed under cc by-sa 3.0 with attribution.