Bir C # lambda ifadesi birden fazla ifade içerebilir mi?
(Düzenleme: Aşağıdaki yanıtların birçoğunda belirtildiği gibi, bu soru başlangıçta "ifadeler" yerine "satırlar" hakkında sorulmuştur.)
Bir C # lambda ifadesi birden fazla ifade içerebilir mi?
(Düzenleme: Aşağıdaki yanıtların birçoğunda belirtildiği gibi, bu soru başlangıçta "ifadeler" yerine "satırlar" hakkında sorulmuştur.)
Yanıtlar:
(Gerçekten birden çok satır yerine birden çok ifadeden bahsettiğinizi varsayıyorum.)
Küme ayraçları kullanarak bir lambda ifadesinde birden çok ifade kullanabilirsiniz, ancak yalnızca ayraç kullanmayan sözdizimi bir ifade ağacına dönüştürülebilir:
// Valid
Func<int, int> a = x => x + 1;
Func<int, int> b = x => { return x + 1; };
Expression<Func<int, int>> c = x => x + 1;
// Invalid
Expression<Func<int, int>> d = x => { return x + 1; };
Lambda ifadesine istediğiniz kadar yeni satır koyabilirsiniz; C # yeni satırları yok sayar.
Muhtemelen birden çok ifade sormak istediniz .
Birden çok ifade parantez içine alınabilir.
Belgelere bakın .
C # 7'den beri:
Tek satırlık açıklama:
int expr(int x, int y) => x + y + 1;
Çok satırlı ifade:
int expr(int x, int y) { int z = 8; return x + y + z + 1; };
bunlar yerel işlevler olarak adlandırılsa da bence bu aşağıdakilerden biraz daha temiz görünüyor ve etkili bir şekilde aynı
Func<int, int, int> a = (x, y) => x + y + 1;
Func<int, int, int> b = (x, y) => { int z = 8; return x + y + z + 1; };
Func<string, bool> test = (name) =>
{
if (name == "yes") return true;
else return false;
}
Gönderen Lambda Expressions (C # programlama Kılavuzu) :
Lambda ifadesinin gövdesi herhangi bir sayıda ifadeden oluşabilir; ancak pratikte tipik olarak iki veya üçten fazla yoktur.
C # 7.0 ile bunun gibi de kullanabilirsiniz
Public string ParentMethod(int i, int x){
int calculation = (i*x);
(string info, int result) InternalTuppleMethod(param1, param2)
{
var sum = (calculation + 5);
return ("The calculation is", sum);
}
}
Diyelim ki bir dersiniz var:
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
Bu sınıfın içindeki C # 7.0 ile bunu küme parantezleri olmadan da yapabilirsiniz:
Action<int, int> action = (x, y) => (_, _) = (X += x, Y += y);
ve
Action<int, int> action = (x, y) => _ = (X += x, Y += y);
şununla aynı olacaktır:
Action<int, int> action = (x, y) => { X += x; Y += y; };
Bu ayrıca, normal bir yöntemi veya yapıcıyı tek bir satıra yazmanız gerektiğinde veya tek bir ifadede birden fazla ifadeye / ifadeye ihtiyaç duyduğunuzda yararlı olabilir:
public void Action(int x, int y) => (_, _) = (X += x, Y += y);
veya
public void Action(int x, int y) => _ = (X += x, Y += y);
veya
public void Action(int x, int y) => (X, Y) = (X + x, Y + y);
Dokümantasyondaki demetlerin yapısökümü hakkında daha fazla bilgi .