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

  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • Elly

    Elly

    3 EKİM 2005
  • JorteexHD

    JorteexHD

    20 NİSAN 2012