SORU
29 HAZİRAN 2012, Cuma


Bir sözdizimi = (x == null) en iyi ? null : x.()işlevi

Temel soru burada - gibi bir şey bu kod satırı var:

var a = (long_expression == null) ? null : long_expression.Method();

Benzer satırları, bu işlev çok tekrarlayın. long_expression her seferinde farklı. Bulmaya çalışıyorumbir şekilde long_expression yinelenen ama bu kompakt kalmasını önlemek için. operator ?? tersi gibi bir şey. Şu an için sadece veren ve birden fazla satır üzerine koyarak düşünüyorum:

var temp = long_expression;
var a = (temp == null) ? null : temp.Method();

Ama bu daha kısa olur bilmem bazı akıllı sözdizimi olup olmadığını merak ettim.

CEVAP
29 HAZİRAN 2012, Cuma


Sanaolabilirbu gibi bir uzantı yöntemi kullanın

public static TResult NullOr<TSource, TResult>(this TSource source,
    Func<TSource, TResult> func) where TSource : class where TResult : class
{
    return source == null ? null : func(source);
}

Sonra:

var a = some_long_expression.NullOr(x => x.Method());

Veya (C sürümüne bağlı#)

var a = some_long_expression.NullOr(Foo.Method);

Foo some_long_expression türü olduğu.

Ben sanmıyorumgerçi bunu. Sadece iki satırı sürümü kullanmak istiyorum. "Eğlenceli Yığın Taşması için, genellikle gerçek kodu için iyi bir fikir değil. "zeki ise daha basit ve daha az zeki ve

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LaKe Lightroom Tutorials

    LaKe Lightro

    22 Temmuz 2014
  • Roger Huffman

    Roger Huffma

    4 ŞUBAT 2007
  • Sam Kear

    Sam Kear

    14 Temmuz 2007