Mari buat daftar jawaban tempat Anda memposting metode ekstensi favorit dan istimewa Anda .
Syaratnya adalah bahwa kode lengkap harus diposting dan contoh dan penjelasan tentang cara menggunakannya.
Berdasarkan minat yang tinggi pada topik ini saya telah menyiapkan Proyek Sumber Terbuka yang disebut extensionoverflow pada Codeplex .
Harap tandai jawaban Anda dengan penerimaan untuk memasukkan kode ke proyek Codeplex.
Silakan kirim kode sumber lengkap dan bukan tautan.
Berita Codeplex:
24.08.2010 Halaman Codeplex sekarang ada di sini: http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize / XmlDeserialize sekarang Diimplementasikan dan Unit Diuji .
11.11.2008 Masih ada ruang untuk lebih banyak pengembang. ;-) Bergabunglah SEKARANG!
11.11.2008 Kontributor ketiga bergabung dengan ExtensionOverflow , selamat datang di BKristensen
11.11.2008 FormatWith sekarang Diimplementasikan dan Unit Diuji .
09.11.2008 Kontributor kedua bergabung dengan ExtensionOverflow . selamat datang untuk chakrit .
09.11.2008 Kami membutuhkan lebih banyak pengembang. ;-)
09.11.2008 ThrowIfArgumentIsNull di Sekarang Diimplementasikan dan Unit Diuji pada Codeplex.
sumber
Jawaban:
Izinkan saya untuk mengganti:
Dengan:
sumber
In
, tapi mungkinIsIn
akan lebih baik.In<T>(...)
juga dan menemukan itu menjadi metode ekstensi paling berguna di luar perpustakaan standar. Tapi saya berselisih dengan namanyaIn
. Nama metode seharusnya menggambarkan apa yang dilakukannya, tetapiIn
tidak melakukannya. Saya sudah menyebutnyaIsAnyOf<T>(...)
, tapi saya kiraIsIn<T>(...)
akan cukup juga.Saya memiliki berbagai metode ekstensi dalam proyek MiscUtil saya (sumber lengkap tersedia di sana - saya tidak akan mengulanginya di sini). Favorit saya, beberapa di antaranya melibatkan kelas lain (seperti rentang):
Barang tanggal dan waktu - kebanyakan untuk tes unit. Tidak yakin saya akan menggunakannya dalam produksi :)
Berkisar dan melangkah - terima kasih banyak kepada Marc Gravell untuk hal - hal operatornya yang memungkinkan ini:
Perbandingan:
Pemeriksaan argumen:
LINQ to XML diterapkan pada tipe anonim (atau tipe lain dengan properti yang sesuai):
Dorong LINQ - akan terlalu lama untuk dijelaskan di sini, tetapi mencarinya.
sumber
string.Format pintas:
Contoh:
Untuk salin dan tempel cepat, buka di sini .
Apakah Anda tidak merasa lebih alami untuk mengetik
"some string".F("param")
bukanstring.Format("some string", "param")
?Untuk nama yang lebih mudah dibaca , cobalah salah satu dari saran ini:
..
sumber
Apakah ini ada gunanya?
sumber
OneOf
harus menerima apa punIList<T>
. Kemudian Anda bisa selalu juga memiliki kelebihan yang membutuhkanparams
arg dan hanya melewati itu ke dalamIList<T>
overload. Saya memberikan jawaban (jalan turun di bagian bawah sekarang) denganNextBool
metode yang mirip dengan AndaCoinToss
, tetapi dengan kelebihan yang mengambilprobability
parameter (bagaimana jika saya ingin sesuatu terjadi 75% dari waktu?). Juga, pilih saja: kode contoh Anda akan melemparNullReferenceException
karenarand
tidak pernah diinisialisasi.CoinToss
diimplementasikan denganrng.NextDouble() < .5
karena.Next(int)
dibuat secara internal.NextDouble()
sehingga Anda akan menghemat gips, * dan cek.Contoh:
sumber
Metode ekstensi:
Metode ini berlaku untuk semua jenis dan memungkinkan Anda menambahkan berbagai item ke daftar sebagai parameter.
Contoh:
sumber
var list = new List<int>{5,4,8,4,2};
ICollection<T>
; maka itu juga bisa digunakan pada, misalnya,LinkedList<T>
danHashSet<T>
, bukan hanya koleksi yang diindeks.Dengan segala cara menempatkan ini dalam proyek codeplex.
Serializing / Deserializing objek ke XML:
sumber
ToXml()
(sepertiToString()
)ForEach untuk IEnumerables
Contoh naif:
Contoh keren:
catatan:
Ini tidak seperti
Select
karenaSelect
mengharapkan fungsi Anda mengembalikan sesuatu seperti untuk mentransformasikannya ke daftar lain.ForEach hanya memungkinkan Anda untuk mengeksekusi sesuatu untuk setiap item tanpa transformasi / manipulasi data.
Saya membuat ini sehingga saya dapat memprogram dalam gaya yang lebih fungsional dan saya terkejut bahwa List memiliki ForEach sementara IEnumerable tidak.
Masukkan ini dalam proyek codeplex
sumber
Ekstensi konversi saya yang memungkinkan Anda melakukan:
Ini dia, seperti yang diposting di TheSoftwareJedi.com
Anda dapat meminta default (memanggil konstruktor kosong atau "0" untuk angka) pada kegagalan, menentukan nilai "default" (saya menyebutnya "lain"), atau meminta nol (di mana T: kelas). Saya juga menyediakan kedua model pengecualian senyap, dan model TryParse khas yang mengembalikan bool yang mengindikasikan tindakan yang diambil, dan param yang keluar menyimpan nilai baru. Jadi kode kita dapat melakukan hal-hal seperti ini
Saya tidak bisa mendapatkan tipe Nullable untuk menggulung semuanya dengan sangat bersih. Saya mencoba sekitar 20 menit sebelum saya menyerah.
sumber
ToOrNull
memiliki perilaku yang sama persisToOrDefault
(yaitu, jika Anda memanggilToOrDefault
jenis referensi dengan konversi yang tidak berhasil, itu akan kembalinull
). Tetapi yang lebih penting, sepertinya agak berlebihan bagi saya karenavar s = myObject as string
mencapai hal yang sama denganvar s = myObject.ToOrNull<string>()
- tetapi tanpa berpotensi harus menangkapInvalidCastException
. Apakah saya melewatkan sesuatu?Saya memiliki metode ekstensi untuk mencatat pengecualian:
Dan digunakan seperti ini:
[maaf karena memposting dua kali; yang ke-2 dirancang lebih baik :-)]
sumber
Berguna untuk mengurai string menjadi Enum.
Kredit diberikan kepada Scott Dorman
--- Edit untuk proyek Codeplex ---
Saya telah bertanya kepada Scott Dorman apakah dia akan keberatan jika kami menerbitkan kodenya di proyek Codeplex. Inilah jawaban yang saya dapat darinya:
sumber
Saya menemukan ini cukup berguna:
Anda dapat menggunakannya di CodePlex.
sumber
DateTimeExtensions
Contoh:
sumber
gitorious.org/cadenza adalah perpustakaan lengkap dari beberapa metode ekstensi paling berguna yang pernah saya lihat.
sumber
Ini adalah salah satu yang sering saya gunakan untuk memformat presentasi.
sumber
Ini adalah to-and-from untuk angka Romawi. Tidak sering digunakan, tetapi bisa berguna. Pemakaian:
Sumber:
sumber
Cara mudah untuk menangani ukuran:
sumber
Untuk Kontrol Winform:
Penggunaan IsDesignTime:
Penggunaan SetDropdownWidth:
Saya lupa menyebutkan, jangan ragu untuk menggunakan ini pada Codeplex ...
sumber
ThrowIfArgumentIsNull adalah cara yang bagus untuk melakukan itu, cek nol yang harus kita semua lakukan.
Di bawah ini adalah cara untuk menggunakannya dan berfungsi pada semua kelas di namespace Anda atau di mana pun Anda menggunakan namespace di dalamnya.
Tidak masalah menggunakan kode ini pada proyek CodePlex .
sumber
default(T)
ini dan menghapus persyaratan kelas.Require.ThatArgument(input != null)
atauRequire.ThatArgument(personId > 0)
. Tidak membutuhkan kode lebih banyak, lebih fleksibel, dan terbaca dengan baik. Saya memiliki penggantian tambahan yang berfungsi ketika Anda ingin menyesuaikan pesan kesalahan atau pengecualian itu sendiri.Saya melewatkan pernyataan Dengan Visual Basic ketika pindah ke C #, jadi begini:
Dan inilah cara menggunakannya di C #:
Menghemat banyak pengetikan!
Bandingkan ini dengan:
dimasukkan ke dalam proyek codeplex
sumber
Mengambil camelCaseWord atau PascalCaseWord dan "wordifies" itu, yaitu camelCaseWord => unta Case Word
Saya sering menggunakannya bersamaan dengan Capitalize
Contoh penggunaan
Bebas digunakan dalam proyek codeplex
sumber
Saya menemukan ini membantu
Ini menghapus cek nol dalam kode panggilan. Sekarang Anda bisa melakukannya
sumber
Konversi ganda menjadi string yang diformat menggunakan budaya yang ditentukan:
Contoh:
sumber
Di bawah ini adalah metode ekstensi yang mengadaptasi kode Rick Strahl (dan komentar juga) untuk menghentikan Anda harus menebak atau membaca tanda urutan byte dari array byte atau file teks setiap kali Anda mengonversinya menjadi string.
Cuplikan memungkinkan Anda melakukan:
Jika Anda menemukan bug, silakan tambahkan ke komentar. Jangan ragu untuk memasukkannya ke dalam proyek Codeplex.
sumber
Ini yang baru saya buat hari ini.
Ini memungkinkan Anda melakukan ini:
yang lebih lancar dan (IMO) lebih mudah dibaca daripada ini:
sumber
thingy.NullOr(t => t.Count)
, di manaCount
int? Anda harus mengembalikandefault(TReturn)
daripada nol, dengan begitu Anda tidak akan memerlukanclass
batasan dan itu akan bekerja untuk tipe nilai jugaTReturn elseValue = default(TReturn)
hanya tersedia untuk. NET 4.0? Saya memiliki 3,5 SP1 dan saya belum pernah melihat konstruk itu (tidak ada kompiler saya). Saya baru saja memindahkan ini ke dalam metode. Satu masalah, bagaimanapun, adalah bahwa tinju tipe nullable ke objek untuk digunakan dengan metode menghasilkan hasil yang tidak terduga (0 vs nol diharapkan).default(T)
kata kunci sudah ada sejak VS2005, tapi saya pikir parameter default adalah fitur .NET 4 baru. Cara termudah untuk itu adalah memiliki dua varian, satu yang menggunakan param dan satu yang tidak. Saya akan memperbarui jawabannya agar kompatibel dengan CLR 2.0. Mengenai tinju - itulah gunanyadefault
. Ini akan menjadi data yang diinisialisasi 0 untuk tipe nilai, dan null untuk semua tipe referensi. TReturn tipe nilai harus tetap tidak dikotak-kotakkan sepanjang fungsi.x.Value
dapat dibatalkan adalah bahwa pengembalian harus mengembalikan nol (jika, misalnya,int?
adalah nol) atau nilai jikaint?
memiliki nilai. Kembali0
ketikaint? x = null
dilewatkan dan kemas ke objek adalah kasus aneh. Saya telah melihat pemeriksaan serupa untuk jenis nullable di perpustakaan seperti fasih nhibernate dan linfu (saya pikir) untuk kasus khusus ini, memungkinkan Anda untuk menjatuhkan batasan kelas seperti yang disarankan sebelumnya."Tandai jawaban Anda dengan tanda terima untuk memasukkan kode ke proyek Codeplex."
Mengapa? Semua Barang di situs ini di bawah CC-by-sa-2.5 , jadi letakkan saja Extension Project Overflow Anda di bawah lisensi yang sama dan Anda dapat dengan bebas menggunakannya.
Bagaimanapun, ini adalah fungsi String.Reverse, berdasarkan pertanyaan ini .
sumber
Saya bosan dengan pemeriksaan nol yang membosankan sambil menarik nilai dari MySqlDataReader, jadi:
Tentu saja ini dapat digunakan dengan SqlDataReader.
Baik hangy dan Joe memiliki beberapa komentar bagus tentang cara melakukan ini, dan sejak itu saya memiliki kesempatan untuk mengimplementasikan sesuatu yang serupa dalam konteks yang berbeda, jadi inilah versi lain:
sumber
as
kata kunci untuk mendapatkan nilai dari pembaca yang memungkinkan untuk null. Jika Anda menggabungkan??
operator penggabungan nol dengan operator as, Anda bahkan dapat memiliki nilai default non-nol untuk langsung ke tipe nilai. Lihat stackoverflow.com/questions/746767/…Itu membuat saya kesal karena LINQ memberi saya OrderBy yang mengambil kelas mengimplementasikan IComparer sebagai argumen, tetapi tidak mendukung lewat dalam fungsi pembanding anonim sederhana. Saya memperbaikinya.
Kelas ini membuat IComparer dari fungsi pembanding Anda ...
... dan metode ekstensi ini memaparkan kelebihan OrderBy saya yang baru pada enumerables. Saya ragu ini bekerja untuk LINQ to SQL, tapi itu bagus untuk LINQ to Objects.
Anda dapat menempatkan ini pada codeplex jika Anda mau.
sumber
Yang ini untuk MVC itu menambahkan kemampuan untuk menghasilkan
<label />
tag keHtml
variabel yang tersedia di setiapViewPage
. Semoga akan bermanfaat bagi orang lain yang mencoba mengembangkan ekstensi serupa.Menggunakan:
Keluaran:
Kode:
sumber
Putar ini:
... dalam hal ini:
... menggunakan metode ekstensi ini:
Lebih banyak metode ekstensi ADO.NET: DbExtensions
sumber