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

  • LG Mobile Global

    LG Mobile Gl

    2 EYLÜL 2010
  • MaximumPCMag

    MaximumPCMag

    23 Temmuz 2010
  • pendrop gaming

    pendrop gami

    4 ŞUBAT 2013