2014-10-31 2 views
3

Есть более короткий путь, чтобы написать это в C#:Кратчайший проверка нуль в C#

if(myobject!=null){ 

} 

В JavaScript мы можем сделать это:

if(myobject){ 

} 

Отказ от ответственности: Я знаю это будет соответствовать true и JavaScript. Это будет использоваться только для переменных, которые должны быть конкретным типом объекта.

Я нашел несколько подобных вопросов, но они просят немного разные вещи:

C# Shortest Way to Check for Null and Assign Another Value if Not

Best and fastest way to check if an object is null

How to determine if variable is 'undefined' or 'null'?

+1

Вы можете делать много вещей в JavaScript, которые нецелесообразны и которые C# просто запрещает. Это один из них (в Интернете уже много дискуссий о том, что _why_ это нецелесообразно, поэтому я не буду распространять этот момент). –

+0

вы можете написать свою собственную функцию ifNull() и даже сделать ее короче, называя ее ifN() .. – TaW

+1

Почему downvote ..? Это законный вопрос, не так ли? –

ответ

11

можно получить с тот же синтаксис в C# с помощью оператор:

public class MyClass { 
    ... 
    // True if instance is not null, false otherwise 
    public static implicit operator Boolean(MyClass value) { 
     return !Object.ReferenceEquals(null, value); 
    } 
    } 


.... 

    MyClass myobject = new MyClass(); 
    ... 
    if (myobject) { // <- Same as in JavaScript 
    ... 
    } 
+0

Хотя это единственный способ добиться более короткой проверки «null» IMHO, это работает только для ваших собственных классов, к сожалению. – fero

+0

Работает как очарование! Просто записка, я должен был сделать ее статической тоже .. например. public static implicit operator ... –

+0

@fero Вы можете написать метод расширения IsNull (этот объект o) 'и затем использовать его как' if (someObject.IsNull()) '. Это будет работать для любого объекта. Вопрос в том, намного ли это короче ... –

-5

Вы можете использовать класс объекта метод статического метода ReferenceEquals, чтобы выяснить, если refrence является недействительным или не

MyClass1 obj = new MyClass1(); 
     if (object.ReferenceEquals(obj,null)) 
     { 
      Console.Write("obj ref is null"); 
     } 
+0

'object.ReferenceEquals (obj, null)' не короче, чем 'obj == null'. На самом деле, я бы сказал, что это немного дольше. – Corak

8

C# языка философия сильно отличается, чем JavaScript. C# обычно заставляет вас быть более явным о каких-то ошибках, чтобы предотвратить некоторые распространенные ошибки программирования (и я уверен, что это также помогает упростить конструкцию компилятора &).

Если C# позволил такое неявное преобразование в булево, вы гораздо больше шансов нарваться на ошибки программирования, как это:

if(myobject = otherObject) 
{ 
    ... 
} 

, где вы сделали назначение вместо проверки равенства. Обычно C# предотвращает такие ошибки (поэтому, хотя ответ Дмитрия умный, я бы посоветовал это).

+0

Вы правы. Протестировал это, и он проскальзывает. –

Смежные вопросы