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

  • DominicFear

    DominicFear

    30 Kasım 2006
  • Jon Reed

    Jon Reed

    14 AĞUSTOS 2006
  • Kurtindo Pop Games

    Kurtindo Pop

    2 HAZİRAN 2013