2011-01-21 1 views
0

Есть ли что-то вроде Javascript's void оператора в C#?
Javascript's void "оценивает выражение и отбрасывает результат, возвращая undefined". Таким образом, я ищу что-то встроенное, которое «оценивает» и возвращает null, или, может быть, тип по умолчанию. (Так оно и должно вроде быть как обратной нуль-сливающихся ?? оператора.)Недействительность Javascript в C#?

Пример использования:

Person a; 

public void main() { 
    var x = void(a = new Person()); 
    // x should contain null 
} 

class Person { } 

(пример не компилируется из-за незаконного использования ключевого слова «пустота», естественно.)

Я в настоящее время используют этот-который работает, но чувствует себя crufty:

protected object voided(object ob) { 
    return null; 
} 

Редактировать. Хорошо, поэтому я определенно должен добавить некоторые подробности. Я использую код в встроенном выражении DataBind в коде ASP.NET. Например:

<asp:Repeater runat="server"> 
    <ItemTemplate> 
     </tr><%# voided(globalPersonVariable = (Person)Container.DataItem)) %></tr> 
    </ItemTemplate> 
</asp:Repeater> 

Использование default, к сожалению, здесь не работает.
(я не включал эту дополнительную информацию в первый раз, потому что я хотел сохранить ее «чистым» C# -простым, а не ASP.NET.)

+6

Зачем вам это нужно? Поместите это в контекст. Я не вижу смысла писать такой код. –

+2

В чем смысл? –

+0

Ничего плохого в 'return null'. И это не то же самое, что и в C#. –

ответ

2

Вы можете просто сделать метод расширения, Voided()

public static object Voided<TType>(this TType tThis) 
{ 
    return null; 
} 

Тогда вы можете назвать это так:

(globalPersonVariable = (Person)Container.DataItem)).Voided() 

Если вы хотите совместить это с материалом по умолчанию уже упоминали другие люди, он меняется на:

public static TType Voided<TType>(this TType tThis) 
{ 
    return default(TType); 
} 
+0

Все еще не совсем то, что я искал, но мне очень нравится этот ответ. –

4

Что-то вроде этого вы ищете?

var x = default(Person) // null 
var i = default(int) // 0 
+2

. Но в коде OP создается экземпляр' Person'. – BoltClock

+0

Это не совсем то, что я ищу. Смотрите вопрос, почему. –

1

Не уверен, что void функция делает в JavaScript, но, чтобы получить значение по умолчанию типа, используйте default ключевое слово:

protected T voided<T>(T obj) { 
    return default(T); 
} 
+2

Оператор 'void' в JavaScript просто оценивает выражение и отбрасывает результат, возвращая' undefined'. – BoltClock

+0

Спасибо за объяснение. Но, если это так, то почему OP попытался сохранить результат этого 'var x = void (a = new Person());'? – decyclone

+0

Хммм, хороший вопрос. – BoltClock

0

Я просто хочу чтобы выбросить эти два фрагмента в микс. Оба работают, но они все еще кажутся более подробными, чем необходимо.

(globalPersonVariable = (Person)(Container.DataItem)) == null ? null : null 

((Func<object,object>)(x => null))(globalPersonVariable = (Person)(Container.DataItem)) 

Для целей Databinding, вы можете также испускают пустую строку:

(globalPersonVariable = (Person)(Container.DataItem)) == null ? "" : "" 

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

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