Sobes.tech
Junior — Middle

Тафовутҳои байни усулҳои FirstOrDefault ва SingleOrDefault дар LINQ чист?

sobes.tech AI

Ҷавоб аз AI

Дар LINQ, усулҳои FirstOrDefault ва SingleOrDefault барои интихоби элементҳо аз пайдарпайӣ истифода мешаванд, аммо маънои гуногун доранд:

  • FirstOrDefault аввалин элемент-ро дар пайдарпайӣ бармегардонад, агар вуҷуд дошта бошад, дар ғайри ҳол арзиши пешфарз (null барои намудҳои истинодӣ) бармегардонад.
  • SingleOrDefault як танҳо элемент-ро дар пайдарпайӣ бармегардонад, агар дақиқ якта бошад, дар ғайри ҳол:
    • Агар ягон элемент набошад, арзиши пешфарзро бармегардонад.
    • Агар бештар аз як бошад, истиснои InvalidOperationException-ро партояд.

Масалан:

var numbers = new List<int> { 1, 2, 3 };

var first = numbers.FirstOrDefault(); // бармегардонад 1
var single = numbers.SingleOrDefault(); // истисно партояд, зеро бештар аз як элемент дорад

var empty = new List<int>();

var firstEmpty = empty.FirstOrDefault(); // бармегардонад 0 (аз пешфарз барои int)
var singleEmpty = empty.SingleOrDefault(); // ҳам 0

var singleItem = new List<int> { 42 };

var singleValue = singleItem.SingleOrDefault(); // бармегардонад 42

Хулоса:

  • Агар мехоҳед аввалин элемент ё null-ро, агар ягон набошад, гиред, FirstOrDefault-ро истифода баред.
  • Агар интизоред, ки танҳо як элемент бошад ва хато гирифтан мехоҳед, агар бештар бошад, SingleOrDefault-ро истифода баред.