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

  • BradleyWuzHere

    BradleyWuzHe

    25 NİSAN 2011
  • curioustravelers

    curioustrave

    12 AĞUSTOS 2006
  • GenTechPC

    GenTechPC

    1 Temmuz 2007