MIT · .NET · Zero/Low-Alloc

Her ekibin ayrı ayrı yazdığı kodu, tek satıra indirin.

string, object, koleksiyon, JSON/XML ve reflection işlemleri için performans odaklı extension method koleksiyonu. Reflection Expression Tree ile bir kez derlenip cache'lenir; string/JSON işlemleri mümkün olduğunca Span<T> üzerinden yürütülür.

12Extension modülü
5Hazır JsonConverter
0Runtime bağımlılık
PAGE.CS — QUERY STRING PARSE
kütüphanesiz
ile
// her tip için ayrı try/catch veya TryParse bloğu
int result;
if (!int.TryParse(request.Query["page"], NumberStyles.Integer,
    CultureInfo.InvariantCulture, out result))
{
    result = 1; // varsayılan
}
// tek satır, generic, culture-safe
int page = request.Query["page"].ToString().ToSafe<int>(1);
 
// katı parse gerekiyorsa exception fırlatan To<T>
decimal price = "1234.56".To<decimal>();
StringExtensions.ToSafe<T> satır: 6 → 2

Neden bu kütüphane

Aynı kodu her ekip biraz farklı, biraz eksik yeniden yazıyor.

String parse, null kontrolü, dictionary doldurma, JSON/XML dönüşümü, reflection ile property okuma — kurumsal .NET projelerinde tekrar eden, hem bug hem performans riski taşıyan işlemler. DSO.Core.Extensions bunu tek yerde, üç ilkeyle toplar.

01 · ALLOCATION

Zero / Low Allocation

Span<char>, ReadOnlySpan<char>, string.Create ve lazy allocation ile GC baskısı azaltılır. Ara string veya iterator üretilmez.

02 · REFLECTION

Cached Reflection

Property/field erişimi her seferinde reflection ile değil, bir kez derlenip ConcurrentDictionary'de cache'lenen Expression Tree delegate'leriyle yapılır.

03 · GÜVENLİK

Null-Safe, Fail-Safe API

Metotlar null girdide patlamak yerine TryXxx / ToSafe<T> desenleriyle güvenli varsayılan davranış sergiler.


Kurulum

Kaynak kod olarak ekleyin, kullanmaya başlayın.

using DSO.Core.Extensions;

Proje şu an kaynak kod olarak paylaşılıyor — ilgili .cs dosyalarını projenize dahil edip yukarıdaki using ifadesini eklemeniz yeterli. NuGet paketi olarak yayınlandığında bu bölüm dotnet add package DSO.Core.Extensions şeklinde güncellenecek.


12 modül

Her modül, kendi sorumluluk alanına odaklanır.

Her kart kendi "kütüphanesiz / ile" örneğini içerir — anahtarı çevirin, farkı görün.


Performans prensipleri

Kütüphane genelinde tekrar eden altı tasarım kararı.

span-first

Önce Span, gerekmedikçe string yok

Arama/parse işlemlerinde önce ReadOnlySpan<char> yolu denenir; gerçekten gerekmedikçe ara string üretilmez.

string.create

Tek geçişte üretim

ToFill, AppendEnd gibi metotlar sonuç string'i doğrudan hedef buffer üzerinde inşa eder; ara StringBuilder adımı yoktur.

lazy alloc

Yalnızca gerektiğinde ayır

List<T> gibi koleksiyonlar yalnızca gerçekten ihtiyaç anında — örn. ilk eşleşme bulunduğunda — oluşturulur.

fast-path

Somut tipler için ayrı yol

List<T> / T[] gibi somut kaynaklar için struct enumerator/indexer kullanan yollar, genel IEnumerable<T> fallback'ine göre önceliklidir.

expr cache

Derlenmiş delegate cache'i

Reflection her çağrıda tekrar çalıştırılmaz; Expression.Lambda(...).Compile() sonucu bir kez saklanır, sonraki çağrılar saf delegate hızında çalışır.

fail-safe

Varsayılan davranış exception yerine

Kritik olmayan metotlar bool dönen TryXxx veya varsayılan değer dönen ToSafe<T> tercih eder; To<T> gibi strict varyantlar bilinçli olarak exception fırlatır.


Katkıda bulunma

Pull request açmadan önce üç şeye dikkat edin.

01

Sorumluluk alanına uyun

Yeni eklenen metotların ilgili extension sınıfının sorumluluk alanına uygun olmasına dikkat edin — örn. string işlemleri StringExtensions'a, koleksiyon işlemleri CollectionExtensions'a.

02

Null-güvenli ve allocation-bilinçli yazın

Mümkün olduğunca null-güvenli yazın; span kullanılabiliyorsa span kullanın.

03

XML doc + "kütüphanesiz" karşılaştırması ekleyin

Public metotlara kısa XML doc yorumları ekleyin ve mümkünse "kütüphanesiz nasıl yazılırdı" karşılaştırmasını PR açıklamasına ekleyin.

PR AÇMADAN ÖNCE KONTROL LİSTESİ
  • Yeni metot doğru extension sınıfında
  • Null girdi davranışı test edildi
  • Gerekirse Span/ReadOnlySpan değerlendirildi
  • Public API'ye XML doc yorumu eklendi
  • PR açıklamasında önce/sonra örneği var
Pull request aç → Issue bildir