Google da ara

 

Mayıs 2009
Pts Sal Çar Per Cum Cts Paz
« Nis   Haz »
 123
45678910
11121314151617
18192021222324
25262728293031

Google Reklamları

Dil Seçimi

Bağış yada Ödeme

Csharp 4.0 – İsimli ve Opsiyonel Parametreler (Named and Optional Arguments)

Csharp 4.0 ile gelen yeniliklerden bir taneside isimli ve opsiyonel parametrelerdir. Method overloading ile çözülen bir methodu birden fazla imza ile çağırma olayını biraz daha kolaylaştırmak için getirilmiş güzel bir yeniliktir.

Kısaca özetlemek gerekirse önceleri Selamla diye bir method yazdığımızda ve bu method sadece string bir adSoyad ile çağrılabilmesi ayrıca opsiyonel olarak yaş , kilo ve cinsiyet parametreleri ile çağrılabilmesi için 4 adet method tanımı yapmamız ve genellikle en fazla parametre alan method içeriğinde işlemleri yapıp diğer methodlardan bu methodu default değerler ile çağırmamız söz konusu idi.

CSharp 4.0 ile gelen Opsiyonel parametre özelliği ile artık tek bir method yazarak  istediğimiz parametreleri opsiyonel olarak bırakıp tanım içerisinde default değerlerini verebiliyoruz.

Bu şu şekilde gerçekleşiyor :

public string Selamla(string adSoyad, int yas = 0, int kilo = 0, bool erkekMi = true){...}

Burdaki tanımda yas,kilo ve erkekMi parametreleri opsiyonel olarak bırakılıyor böylece; sadece adSoyad göndererek bu methodu çağırabiliyoruz. İstersek sırayla adSoyad,yas parametrelerini ve sırası bozulmadan diğerlerinide bu şekilde eskiden kullandığımız gibi kullanabiliriz. Ancak sadece adSoyad ve erkekMi parametrelerini göndererek çağırabilmek için İsimli çağırım kullanmalıyız.

Buda şu şekilde gerçekleşiyor :

Selamla("Eylem", erkekMi : false);
Selamla(adSoyad: "Eylem", erkekMi: false);

Böylece opsiyonel parametreleri istediğimiz sıra ve şekilde kullanabilir hale geliyoruz buda bizim gereksiz yere tonlarca overload method yazdırmayarak zaman kazandırıyor.

İlgili örneğin tüm kodları için :

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(Selamla("Yılmaz"));
            MessageBox.Show(Selamla("Yılmaz", 23));
            MessageBox.Show(Selamla("Yılmaz", 23, 78));
            MessageBox.Show(Selamla("Eylem", 25, 49, false));
            MessageBox.Show(Selamla("Eylem", erkekMi : false));
            MessageBox.Show(Selamla(adSoyad: "Eylem", erkekMi: false));
        }
        public string Selamla(string adSoyad, int yas = 0, int kilo = 0, bool erkekMi = true)
        {
            string sonuc = String.Format("Merhaba {0} {1} ", adSoyad,erkekMi ? "Bey": "Hanım");
            if (yas > 0)
            {
                sonuc += Environment.NewLine + "Yaşınız = " + yas;
            }
            if (kilo > 0)
            {
                sonuc += Environment.NewLine + "Kilonuz = " + kilo;
            }
            return sonuc;
        }

EncoderFallbackException: Unable to translate Unicode character

EncoderFallbackException: Unable to translate Unicode character \uD9F5 at index 4 to specified code page.]
System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index) +156
System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars) +267
System.Text.UTF8Encoding.GetByteCount(Char* chars, Int32 count, EncoderNLS baseEncoder) +2827429
System.Text.UTF8Encoding.GetByteCount(String chars) +45
System.IO.BinaryWriter.Write(String value) +38

….

Şeklinde bir hatayı aylardır sorunsuz çalışan bir Asp.Net 2.0 web sitemizde aldık, öncelikle IIS i restart ederek sorunun giderilmiş olacağını düşündük ancak herhangi bir gelişme olmadı. Sonra hata veren yerdeki kodlarla ilgili bir kaç düzenleme yaptık fakat yine herhangi bir gelişme olmamıştı.

En son hatalar Access Denied boyutuna ulaşınca Asp.Net Temporary Files klasörünü boşaltmayı denedim ancak, hep bir iki dosya silinemiyor ve dosya kullanımda hatası alıyordum. En son çare olarak IIS in bulunduğu serveri restart ettim ve herhangi bir problem kalmadı. Daha önce benzer durumu local de çalışan bir server üzerindeki, file system de bulunan dosyaları network üzerinden birden fazla kişi aynı anda kopyalarken üzerine yazmaya çalıştığımızda almıştık. Ve hiç bir şekilde işletim sistemini yeniden başlatmadan sorun giderilemiyordu.

SQL SELECT INTO

Select Into bir tablodan verileri alarak başka bir tablo oluşturmaya yarayan bir sql cümlesidir.

Genellikle tabloların backuplarını almak için kullanılmaktadır.

SQL SELECT INTO Yazımı:

Tüm kolonlardan yeni bir tablo oluşturabiliriz :

SELECT *
INTO yeni_tablo_adi [IN harici_veritabani]
FROM eski_tablo_adi

Yada sadece belirlirli kolonlardan yeni bir tablo oluşturabiliriz:

SELECT kolon_adi1,kolon_adi2
INTO yeni_tablo_adi [IN harici_veritabani]
FROM eski_tablo_adi

Kaynak: http://www.w3schools.com/Sql/sql_select_into.asp

stack overflow exception nasıl alınır.

Bir çok nedenle alınabilecek bu exception en güzel şu şekilde alınmaktadır.

İki adet entity niz var ve bunlar aralarında Child-Parent ilişkisi var.

Örnek olarak Kitap – Sayfa entitylerini ele alalım:

Kitap üzerinde SayfaCollection bulunmakta, ayrıca Sayfa üzerindede KitapIdSource bulunmakta.

Burda normal kullanım ya Kitap üzerindeki SayfaCollection ın üzerine sayfalar ekleyerek kullanmak yada Sayfa üzerindeki KitapIdSource a Sayfa nın bağlı olduğu kitap ın referansı verilir.

Stack overflow exception almak içinse bunun bir farklı ve yanlış kullanımı olan iki yönetimi birden kullanmak gerekir.
Yani KitapIdSource una ilgili Kitap ın referansını verdiğimiz bir Sayfa nesnesini gidip Kitap üzerindeki SayfaCollection a da ekleriz ve ilgili Entity yi herhangi bir görsel component a datasource olarak verir hatamızı güzel bir şekilde alırız.

ilgili örnekler Nettiers için anlatılmıştır. hata LinqToSql üzerindede alınabilmektedir.

TFS – Shelve

Shelve adındanda belli olacağı üzere raf sistemidir. Ve Team System ile çalışırken üzerinde çalıştığınız dosyanın check-in yapılacak kadar olgunlaşmadığına inanıyorsanız ve bir şekilde check-in yapma yada lock unu kaldırma zorunluluğunuz doğmuş ise dosyaları Shelve e kaldırabilirsiniz.

shelve_pending_changes_menu

shelve_pending_changes_dialog

Shelve e kaldırdığınız dosyaları daha sonra tekrar getirip çalışmanıza devam edebilirsiniz.