10 Nisan 2017 Pazartesi
Karşılaştırıcı Kullanarak Haritalanmış (Mapped) GroupBy Örneği
Örneğimiz, bir dizideki anagramları (aynı harflerle yazılan kelimeler) bulmaktadır. Karşılaştırıcı sınıfta kelimelerin anagram olup olmadıklarını belirleyen "SiraliKarakterleriVer" isimli özel bir yöntem kullanıldı. Bu yöntem parametre olarak verilen kelimedeki harfleri alfabetik sıraya sokmaktadır. Anagram kelimelerin harflerinin alfabetik sırası aynı olacağından bu yöntem sayesinde anagram kelimeler karşılaştırılabilmektedir.
Bu örnek dizideki anagramları bulur ve gruplandırır. Daha sonra bu anagram gruplarını çıktıya yazar.
string[] Anagramlar = { "şart", "yumak", "antik", "traş", "yamuk", "nakit" };
var AnagramGruplari = Anagramlar.GroupBy(Kelime => Kelime, new AnagramEsitlikKarsilastirici());
Console.WriteLine("Dizideki anagramlar :");
foreach (var Grup in AnagramGruplari)
{
Console.WriteLine("---");
foreach (var Kelime in Grup)
{
Console.WriteLine(Kelime);
}
}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
Dizideki anagramlar :
---
şart
traş
---
yumak
yamuk
---
antik
nakit
Dizide kullanılan karşılaştırıcı sınıf şöyledir:
public class AnagramEsitlikKarsilastirici : IEqualityComparer
{
public bool Equals(string x, string y)
{
return SiraliKarakterleriVer(x) == SiraliKarakterleriVer(y);
}
public int GetHashCode(string obj)
{
return SiraliKarakterleriVer(obj).GetHashCode();
}
private string SiraliKarakterleriVer(string Kelime)
{
char[] KelimeninKarakterleri = Kelime.ToCharArray();
Array.Sort(KelimeninKarakterleri);
return new string(KelimeninKarakterleri);
}
}
Kaynak:
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
Linq SelectMany Kullanımı
var Ogrenciler = OgrencileriGetir();
List Kulupler = KulupleriGetir();
var UyeOlunanKulupler = Ogrenciler.SelectMany(Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup),
(Ogrenci, Kulup) =>
new {
Ogrenci.Adi,
KulupAdi = Kulup.Adi
}
);
Console.WriteLine("Öğrenciler ve kulupleri :");
foreach (var Satir in UyeOlunanKulupler)
{
Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi);
}
Console.ReadLine();
SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ), ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler.
Bu örnekte new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ifadesinde birinci özelliğin adı belirtilmemiştir. Yani isimsiz tip new { Adi = Ogrenci.Adi, KulupAdi = Kulup.Adi } şeklinde yazılmamıştır. Böyle bir durumda özellik adı olarak seçilen özelliğin adı (örneğimizde Ogrenci.Adi bölümündeki Adi) kullanılacaktır.
List Kulupler = KulupleriGetir();
var UyeOlunanKulupler = Ogrenciler.SelectMany(Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup),
(Ogrenci, Kulup) =>
new {
Ogrenci.Adi,
KulupAdi = Kulup.Adi
}
);
Console.WriteLine("Öğrenciler ve kulupleri :");
foreach (var Satir in UyeOlunanKulupler)
{
Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi);
}
Console.ReadLine();
SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ), ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler.
Bu örnekte new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ifadesinde birinci özelliğin adı belirtilmemiştir. Yani isimsiz tip new { Adi = Ogrenci.Adi, KulupAdi = Kulup.Adi } şeklinde yazılmamıştır. Böyle bir durumda özellik adı olarak seçilen özelliğin adı (örneğimizde Ogrenci.Adi bölümündeki Adi) kullanılacaktır.
6 Nisan 2017 Perşembe
c# İstisna (Exception) Durum Sınıf Açıklamaları
Sık Kulanılan İstisnai Durum Sınıfları
Çalışma zamanında beklenmedik bir hatanın oluşumu sonrasında oluşturulan nesnelere istisnai durum sınıf nesneleri denir. Bir hatanın oluşması, çalışma zamanında ilgili hatayı temsil eden sınıf türünden bir nesnenin oluşturulması anlamına gelir. Sık kullanılan istisnai durum sınıfları :
Çalışma zamanında beklenmedik bir hatanın oluşumu sonrasında oluşturulan nesnelere istisnai durum sınıf nesneleri denir. Bir hatanın oluşması, çalışma zamanında ilgili hatayı temsil eden sınıf türünden bir nesnenin oluşturulması anlamına gelir. Sık kullanılan istisnai durum sınıfları :
- System.OutOfMemoryException: Programın çalışması için yeterli bellek kalmadıysa oluşur.
- System.StackOverflowException: Stack (Yığın) bellek bölgesinin birden fazla metod için kullanılması durumunda oluşur. Genellikle kendini çağıran metodların hatalı kullanılmasıyla meydana gelir.
- System.NullReferenceException: Bellekte yer ayrılmamış bir nesne üzerinden sınıfın üye elemanlarına erişmeye çalışırken oluşur.
- System.OverflowException: Bir veri türüne kapasitesinden fazla veri yüklemeye çalışılırken oluşur.
- System.InvalidCastException: Tür dönüştürme operatörüyle geçersiz tür dönüşümü yapılmaya çalışıldığında oluşur.
- System.IndexOutOfRangeException: Bir dizinin olmayan elemanına erişilmeye çalışılırken fırlatılır.
- System.ArrayTypeMismatchException: Bir dizinin elemanına yanlış türde veri atanmaya çalışılırken oluşur.
- System.DividedByZero: Sıfıra bölme yapıldığı zaman oluşur.
- System.ArithmeticException: DividedByZero ve OverflowException bu sınıftan türemiştir. Hemen hemen matematikle ilgili tüm istisnaları yakalayabilir.
- System.FormatException: Metodlara yanlış biçimde parametre verildiğinde oluşur.
1 Nisan 2017 Cumartesi
REST Servis Cagırma
REST GET/POST/PUT/DELETE yapmak için uyguladığım adımlar şu şekilde:
- Visual Studio’da Visual C#/Windows Desktop/Console Application projesi oluşturdum. Adını RestClientSample koydum.
- NuGet üzerinden Microsoft.AspNet.WebApi.Client paketini yükledim.
- Rest servise gönderilecek ve servisten dönecek nesnelere karşılık gelen sınıfları oluşturdum.
- Program.cs’yi aşağıdaki gibi değiştirdim.
using
System;
using
System.Net.Http;
using
System.Net.Http.Headers;
using
System.Text;
using
System.Threading.Tasks;
namespace
RestClientSample
{
class
Program
{
static
void
Main(
string
[] args)
{
try
{
RunAsync().Wait();
}
catch
(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
Console.ReadKey();
}
static
async
Task RunAsync()
{
using
(
var
client =
new
HttpClient())
{
// Servis adresi
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new
MediaTypeWithQualityHeaderValue(
"application/json"
));
// Servis Basic Http Authentication istiyorsa eklenir.
client.DefaultRequestHeaders.Authorization =
new
AuthenticationHeaderValue(
"Basic"
, Convert.ToBase64String(
new
UTF8Encoding().GetBytes(
string
.Format(
"{0}:{1}"
,
"TestUser"
,
"Pass"
))));
// HTTP GET
HttpResponseMessage response =
await
client.GetAsync(
"api/IotDatas/1"
);
if
(response.IsSuccessStatusCode)
{
IotData product =
await
response.Content.ReadAsAsync<IotData>();
Console.WriteLine(
"{0}\t${1}\t{2}"
, product.Name, product.Value, product.CreateDate);
}
// HTTP POST
var
iotData =
new
IotData { Name =
"Test"
, Value =
null
, CreateDate = DateTime.Now };
response =
await
client.PostAsJsonAsync(
"api/IotDatas"
, iotData);
if
(response.IsSuccessStatusCode)
{
Uri gizmoUrl = response.Headers.Location;
// HTTP PUT
iotData.Value =
null
;
response =
await
client.PutAsJsonAsync(gizmoUrl, iotData);
// HTTP DELETE
response =
await
client.DeleteAsync(gizmoUrl);
}
}
}
}
}
Kaydol:
Kayıtlar (Atom)