C# Yield for Readability and Performance
Posted by Harshana on 20 January, 2012
1 comment so far
yield කියන keyword එක C# වල තියෙන භාවිතයට පහසු keyword එකක්. ලේසියෙන්ම මේ keyword එක තේරුම් ගන්න අපි පහත උදාහරණය බලමු.
public static IList<int> GetEven(IEnumerable<int> ints)
{
var evenNos = new List<int>();
foreach (int i in ints)
if (i % 2 == 0)
evenNos.Add(i);
return evenNos;
}මේ උදාහරණයේදි අළුත් List Object එකක් සාදාගෙන එයට අදාල ඔත්තේ සංඛයා ටික දාගෙන රිටන් කිරීම කරනු ලබනව. ඒ වගේම මේ මෙතඩ් එක පහසුවෙන් පහත තියෙන විදිහට ලියන්න පුළුවන්.
public static IEnumerable<int> GetEven(IEnumerable<int> ints)
{
// Use yield to return the even numbers in the list.
foreach (int i in ints)
if (i % 2 == 0)
yield return i;
}මෙහිදී yield කියන keyword එක භාවිතා කරල ලියල තියෙනව. නමුත් return type එක IEnumerable. මේ දෙක වැඩ කරන්නෙ කොහොමද කියල බලමු.
සාමාන්ය ක්රමයට
int[] ints = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 };
var EvenNumbers = NumberList. GetEven(ints.ToList<int>());
foreach (int i in EvenNumbers)
Console.WriteLine(i);- GetEven() යන method එක call කිරීම.
- GetEven() method එකෙන් List object එකක් return කිරීම.
- අවෂයතාවය සඳහා නැවත Loop එකක් භාවිතා කර List object එක භාවිතා කිරීම.
Yield භාවිතා කිරීමෙන්.
int[] ints = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 };
foreach (int i in NumberList.GetEven())
Console.WriteLine(i);- GetEven() යන method එක call කිරීම.
- GetEven() method එකෙන් එක අයිතමයක් ඉල්ලා ගැනීම.
- GetEven() method එකෙන් ඊලග අයිතමය ලබාදීම සහ අවෂය වැඩකටයුතු කිරීම.
- නැවත 2වෙනි පියවරට යාම.
ඒ වගේම මෙය භාවිතා කිරීමේ සීමා කිරීම් කිහිපයක් තියෙනව.
- Unsafe code blocks තුල භාවිතා කල නොහැකි වීම.
- finally නැති try-catch block එකක් තුල භාවිතා කල නොහැකි වීම.
- parameeters ref හෝ out ලෙස භාවිතා කර ඇති විටෙක.
- anonymous method (http://msdn.microsoft.com/en-us/library/0yw3tz5k.aspx) තුල භාවිතා කල නොහැක.
මෙමගින් ඇති වාසි අවාසි සිතීම භාවිතා කිරීම ඔබ සතුයි. Yield මගින් ඔබගේ කේතය කාර්යක්ෂමව මෙන්ම කියවීමට ප හසු කරයි. මෙම පහසුකම .NET 2.0 සිට ඇති පහසුකමක් වන අතර වැඩි විස්තර http://msdn.microsoft.com/en-us/library/9k7k7cf0(v=vs.100).aspx මගින් බලාගත හැක.
Popularity: 276 views







One Comment on “C# Yield for Readability and Performance”
බොහොම වැදගත් ලිපියක්.. තව මේ වගේ ඒව ලියන්න