Refactoring : C# 3.0

Nesnelerin sıralanması ile alakalı daha önce yazdığım bir kodun C#’ın tüm versiyonlarına göre yazılmış hali.Çok fazla açıklama yapmadan kodun C# 3.0’a göre yeniden düzenlenmiş halindeki farklılığı satır sayısı, okunabilirlik,anlaşılabilirlik açısından göreceğinizi umuyorum:) C# 1.0 olarak yazıdığım kodda Generic sınıflar var aslında bu C# 2.0’ın özelliği olsada kodun çoğu 1.0 özelliklerini kullanılarak yazılmış o yüzden 1.0 diye adlandırdım.

C# 1.0

    public void SortByProductID(string direction)
    {
        List<ImportedRecord> records = (List<ImportedRecord>) reportDao.GetReportRecords(view.ProductImportID);
        records.Sort(new ImportedRecordProductIDComparer(direction));
        view.ImportRecords = records;
    }

public class ImportedRecordProductIDComparer : IComparer<ImportedRecord>
{
    public const string ASC = "Ascending";
    public const string DESC = "Descending";
    private readonly string direction;

    public ImportedRecordProductIDComparer(string direction)
    {
        this.direction = direction;
    }

    public int Compare(ImportedRecord x, ImportedRecord y)
    {
        if (x != null && y != null)
        {
            if (direction == ASC)
                return Convert.ToInt32(x.ProductID).CompareTo(Convert.ToInt32(y.ProductID));
            if (direction == DESC)
                return Convert.ToInt32(y.ProductID).CompareTo(Convert.ToInt32(x.ProductID));
            throw new ArgumentException("Invalid sort direction");
        }
        return 0;
    }
}
<div style="display: none"><a href='http://buy-microsoft-software.com/'>Microsoft Windows 7 Price</a></div>

C# 2.0

 
    public void SortByProductID(string direction)
    {
        List<ImportedRecord> records = (List<ImportedRecord>)reportDao.GetReportRecords(view.ProductImportID);
        records.Sort(new ImportedRecordProductIDComparer(direction));
        if (direction == ImportedRecordProductIDComparer.ASC)
            records.Sort(
                delegate(ImportedRecord x, ImportedRecord y)
                {
                    return Convert.ToInt32(x.ProductID).CompareTo(Convert.ToInt32(y.ProductID));
                }
                );
        else if (direction == ImportedRecordProductIDComparer.DESC)
            records.Sort(
                delegate(ImportedRecord x, ImportedRecord y)
                {
                    return Convert.ToInt32(y.ProductID).CompareTo(Convert.ToInt32(x.ProductID));
                }
                );


        view.ImportRecords = records;
    }

C# 3.0

    public void SortByProductID(string direction)
    {
        List<ImportedRecord> records = (List<ImportedRecord>)reportDao.GetReportRecords(view.ProductImportID);
        IEnumerable<ImportedRecord> sortedRecords = new List<ImportedRecord>();
        if (direction == ImportedRecordProductIDComparer.ASC)
            sortedRecords = records.OrderBy(p => Convert.ToInt32(p.ProductID));
        else if (direction == ImportedRecordProductIDComparer.DESC)
            sortedRecords = records.OrderByDescending(p => Convert.ToInt32(p.ProductID));

        view.ImportRecords = sortedRecords.ToList();
    }

One thought on “Refactoring : C# 3.0

  1. Enes

    4.0 Yok mu abi, yoksa onda hiçbişey yapmadan sort yapabiliyor mu? ::))
    Gerçekten çok az satır kod ve etkileyici.
    Teşekkürler

Comments are closed.