Generics List<T> tipini projelerimde kullanıyorum. Gerçekten bazı metodları işimi çok kolaylaştırıyor.Bir Döngüde tek tek  karşılaştırma işlemini yapmadan istediğim liste elemanlarını çekebiliyorum. En çok kullandığım metodları :

Find: Liste içinde verilen şarta uyan ilk elemanı getirir.
FindAll: Liste içinde şarta uyan tüm elemanları getirir.
FindIndex: Şarta uyan ilk elemanın listedeki sırasını getirir. Şarta uyan eleman yoksa -1 döner.
Exists: Verilen şartta uyan liste elemanın olup olmadığı bilgisini döner. Dönüş tipi Boolean.

Kullanımı şu şekilde:
public class CountryModel
    {
        private int _countryModelID;
        private string _countryModelName;

        public int CountryModelID
        {
            get { return _countryModelID; }
            set { _countryModelID = value; }
        }
        public string CountryModelName
        {
            get { return _countryModelName; }
            set { _countryModelName = value; }
        }
        public void GetItemFromList(List<CountryModel> countryModelList)
        {
            CountryModel countryModel = null;
            try
            {

//elimizde liste var kabul ediyoruz.
                if (countryModelList != null && countryModelList.Count > 0)
                {

//countryModel Id si 1 olanları çekmek isteyelim. Normalde db’den çektiğimiz verilerle karşılaştırma yapılabilir.
                    int compareValue = 1;
           //countryMdl Id si 1 olan ilk elemanı getirir.
                    countryModel = countryModelList.Find(delegate(CountryModel cntryMdl) { return cntryMdl.CountryModelID == compareValue; });
                 // countryMdl Id si 1 olan tüm elemanları getirir.
                    List<CountryModel> cntryMdlList = countryModelList.FindAll(delegate(CountryModel cntryMdl) { return cntryMdl.CountryModelID == compareValue; });
                

//birden fazla sart verilebilir.countryMdl Id si 1 olan ve countrymodel name i Deneme olan ilk kaydın indexini getirir.
                    int index = countryModelList.FindIndex(delegate(CountryModel cntryMdl)
                    { return cntryMdl.CountryModelID == compareValue && cntryMdl.CountryModelName == “Deneme”; });

                }
            }
            catch (Exception ex)
            {
                //write log when an error is occurred.
                ExceptionPolicy.HandleException(ex, “Business”);
            }
            finally
            {
                if (countryModelList != null) countryModelList = null;
            }
        }

    }

Aslında çok önemli bir konu olduğunu düşünüyorum. Ama internet üzerinde .Net ile ilgili makalelerde  hiç üstünde durulmayan bir konu. Microsoft web uygulamalarında statik değişken kullanmayın diyor. Sebebi mi?

Statik değişkenlerin, diğer değişkenlere göre bellekte tutuluş biçimi farklı. Statik değişkenler uygulama ilk çalıştığında sadece 1 kez bellekte oluşturuluyor ve statik değişkenin bulunduğu class tan türetilen tüm nesneler aynı statik değişkene erişiyor. Buda sayfaya bağlanan tüm kullanıcıların aynı değere erişmesi anlamına geliyor. Tüm kullanıcıların aynı statik değişkene erişmesi diğer kullanıcılara yanlış bilgi gösterilmesine neden oluyor.  Oysaki statik olmayan değişkenlerde new sözcüğüyle oluşturulan her nesne için ayrı bir değişken bellekte oluşturuluyor. Bunu göstermek  için küçük bir uygulama yazdım.

public partial class _Default : System.Web.UI.Page
{
    static int staticVariable = 0;
    int variable = 0;

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnShow_Click(object sender, EventArgs e)
    {
        staticVariable++;
        variable++;

        lblStaticResult.Text = staticVariable.ToString();
        lblResult.Text = variable.ToString();

 

    }
}

<form id=”form1″ runat=”server”>
   
    <asp:Label ID=”lblStaticResult” runat=”server”></asp:Label>
    <asp:Label ID=”lblResult” runat=”server”></asp:Label>
    <asp:Button ID=”btnShow” runat=”server” Text=”Göster” onclick=”btnShow_Click” />
    </form>

sayfayı ilk çalıştırdığında ve Göster butonuna basıldığındaki  sonuçlar :

1,1

Aynı sayfayı başka bir pencerede çağırıp göster butonuna basıldığındaki sonuç :

2,1

Bu arada statik değişkenlerden bu kadar bahsetmişken statik metodlarda da aynı durum var mı diye sorarsanız;  intenetteki araştırmalarımda statik metodların multi threading olduğunu öğrendim. Yani gönül rahatlığıyla kullanabiliriz. Son olarak microsoftun konuyla ilgili açıklamasının olduğu sayfanın linkini veriyorum.

http://support.microsoft.com/kb/893666/en-us


© 2007 Eliffff@EL-IF | iKon Wordpress Teması | Blog Alt Yapısı WordPress Tr | WpArşiv