Hagamos una lista de respuestas donde publique sus métodos de extensión excelentes y favoritos .
El requisito es que se debe publicar el código completo y un ejemplo y una explicación sobre cómo usarlo.
Basado en el gran interés en este tema, he configurado un proyecto de código abierto llamado extensionoverflow en Codeplex .
Marque sus respuestas con una aceptación para incluir el código en el proyecto Codeplex.
Publique el código fuente completo y no un enlace.
Noticias Codeplex:
24.08.2010 La página de Codeplex ahora está aquí: http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize / XmlDeserialize ahora se implementa y se prueba la unidad .
11.11.2008 Todavía hay espacio para más desarrolladores. ;-) ¡ Únete AHORA!
11.11.2008 El tercer contribuyente se unió a ExtensionOverflow , bienvenido a BKristensen
11.11.2008 FormatWith ahora se implementa y se prueba la unidad .
09.11.2008 El segundo contribuyente se unió a ExtensionOverflow . bienvenido a chakrit .
09.11.2008 Necesitamos más desarrolladores. ;-)
09.11.2008 ThrowIfArgumentIsNull en ahora implementado y probado en Codeplex.
fuente
Respuestas:
Me permite reemplazar:
Con:
fuente
In
, pero tal vezIsIn
sería mejor.In<T>(...)
y descubrí que es el método de extensión más útil fuera de la biblioteca estándar. Pero estoy en desacuerdo con el nombreIn
. Se supone que el nombre de un método describe lo que hace, peroIn
no lo hace. Lo he llamadoIsAnyOf<T>(...)
, pero supongoIsIn<T>(...)
que también sería adecuado.Tengo varios métodos de extensión en mi proyecto MiscUtil (la fuente completa está disponible allí, no la voy a repetir aquí). Mis favoritos, algunos de los cuales involucran otras clases (como rangos):
Fecha y hora, principalmente para pruebas unitarias. No estoy seguro de usarlos en producción :)
Rangos y pasos: muchas gracias a Marc Gravell por sus cosas de operador para hacer esto posible:
Comparaciones:
Comprobación de argumentos:
LINQ to XML aplicado a tipos anónimos (u otros tipos con propiedades apropiadas):
Presione LINQ: tomaría demasiado tiempo explicarlo aquí, pero búsquelo.
fuente
cadena. Atajo de formato:
Ejemplo:
Para copiar y pegar rápidamente, vaya aquí .
¿No le parece más natural escribir en
"some string".F("param")
lugar destring.Format("some string", "param")
?Para obtener un nombre más legible , pruebe una de estas sugerencias:
..
fuente
¿Son de alguna utilidad?
fuente
OneOf
acepte algunoIList<T>
. Entonces siempre se puede también tener una sobrecarga que toma unparams
arg y simplemente pasa que en laIList<T>
sobrecarga. Di una respuesta (ahora en la parte inferior en este momento) con unNextBool
método similar al tuyoCoinToss
, pero con una sobrecarga que requiere unprobability
parámetro (¿qué pasa si quiero que ocurra algo el 75% del tiempo?). Además, solo una selección: tu código de ejemplo arrojará unNullReferenceException
dadorand
que nunca se inicializa.CoinToss
que se implemente conrng.NextDouble() < .5
porque internamente.Next(int)
está hecho.NextDouble()
para que pueda guardar un elenco, un * y un cheque.Ejemplo:
fuente
El método de extensión:
El método se aplica a todos los tipos y le permite agregar un rango de elementos a una lista como parámetros.
Ejemplo:
fuente
var list = new List<int>{5,4,8,4,2};
ICollection<T>
; entonces también podría usarse, por ejemplo,LinkedList<T>
yHashSet<T>
no solo en colecciones indexadas.Por supuesto, pon esto en el proyecto codeplex.
Serializar / Deserializar objetos a XML:
fuente
ToXml()
(comoToString()
)ForEach para IEnumerables
Ejemplo ingenuo:
Buen ejemplo:
Nota:
Esto no es así
Select
porqueSelect
espera que su función devuelva algo como para transformarse en otra lista.ForEach simplemente le permite ejecutar algo para cada uno de los elementos sin ninguna transformación / manipulación de datos.
Hice esto para poder programar en un estilo más funcional y me sorprendió que List tenga un ForEach mientras que IEnumerable no.
Pon esto en el proyecto codeplex
fuente
Mis extensiones de conversión que te permiten hacer:
Aquí está, según lo publicado en TheSoftwareJedi.com
Puede solicitar el valor predeterminado (llama al constructor en blanco o "0" para los números) en caso de error, especificar un valor "predeterminado" (lo llamo "otro") o solicitar un valor nulo (donde T: clase). También proporcioné modelos de excepción silenciosa y un modelo típico de TryParse que devuelve un valor de bool que indica la acción tomada, y un parámetro de salida contiene el nuevo valor. Entonces nuestro código puede hacer cosas como esta
No pude hacer que los tipos Nullable se integraran de manera muy limpia. Lo intenté durante unos 20 minutos antes de tirar la toalla.
fuente
ToOrNull
tiene exactamente el mismo comportamiento queToOrDefault
(es decir, si llamaToOrDefault
a un tipo de referencia con una conversión fallida, volveránull
). Pero lo que es más importante, me parece algo redundante, ya quevar s = myObject as string
logra lo mismo quevar s = myObject.ToOrNull<string>()
, pero sin tener que atraparloInvalidCastException
. ¿Me estoy perdiendo de algo?Tengo un método de extensión para registrar excepciones:
Y se usa así:
[perdón por publicar dos veces; el segundo está mejor diseñado :-)]
fuente
Útil para analizar una cadena en una enumeración.
El crédito va a Scott Dorman
--- Editar para el proyecto Codeplex ---
Le pregunté a Scott Dorman si le importaría que publiquemos su código en el proyecto Codeplex. Esta es la respuesta que recibí de él:
fuente
Este me parece bastante útil:
Puede usarlo en CodePlex.
fuente
DateTimeExtensions
Ejemplos:
fuente
gitorious.org/cadenza es una biblioteca completa de algunos de los métodos de extensión más útiles que he visto.
fuente
Aquí hay uno que uso con frecuencia para formatear presentaciones.
fuente
Aquí hay una lista de números romanos. No se usa con frecuencia, pero podría ser útil. Uso:
La fuente:
fuente
Una forma conveniente de lidiar con los tamaños:
fuente
Para controles Winform:
Uso de IsDesignTime:
Uso de SetDropdownWidth:
Olvidé mencionar, siéntase libre de usarlos en Codeplex ...
fuente
ThrowIfArgumentIsNull es una buena manera de hacer esa verificación nula que todos deberíamos hacer.
A continuación se muestra la forma de usarlo y funciona en todas las clases en su espacio de nombres o donde sea que use el espacio de nombres dentro.
Está bien usar este código en el proyecto CodePlex .
fuente
default(T)
para esto y eliminaría el requisito de clase.Require.ThatArgument(input != null)
oRequire.ThatArgument(personId > 0)
. No requiere mucho más código, es mucho más flexible y se lee muy bien. Tengo anulaciones adicionales que toman funciones para cuando desea personalizar el mensaje de error o la excepción en sí.Echo de menos la instrucción With de Visual Basic cuando me muevo a C #, así que aquí va:
Y aquí está cómo usarlo en C #:
¡Ahorra mucho tipeo!
Compare esto con:
poner en proyecto codeplex
fuente
Toma un camelCaseWord o PascalCaseWord y lo "wordifica", es decir, camelCaseWord => camel Case Word
A menudo lo uso en conjunción con Capitalize
Ejemplo de uso
De uso gratuito en proyecto codeplex
fuente
Encontré este útil
Elimina el cheque nulo en el código de llamada. Ahora puedes hacer
fuente
Convierte un doble a una cadena formateada usando la cultura especificada:
Ejemplo:
fuente
A continuación se muestra un método de extensión que adapta el código de Rick Strahl (y los comentarios también) para evitar que tenga que adivinar o leer la marca de orden de bytes de una matriz de bytes o un archivo de texto cada vez que lo convierte en una cadena.
El fragmento le permite simplemente hacer:
Si encuentra algún error, agréguelo a los comentarios. Siéntase libre de incluirlo en el proyecto Codeplex.
fuente
Aquí hay uno que acabo de crear hoy.
Te permite hacer esto:
que es más fluido y (IMO) más fácil de leer que esto:
fuente
thingy.NullOr(t => t.Count)
, dóndeCount
está un int? Debería devolver endefault(TReturn)
lugar de nulo, de esa manera no necesitará laclass
restricción y también funcionará para los tipos de valorTReturn elseValue = default(TReturn)
que solo está disponible para .NET 4.0? Tengo 3.5 SP1 y nunca he visto esa construcción (tampoco mi compilador). Acabo de mover esto al interior del método. Sin embargo, un problema es que al encajonar un tipo anulable a un objeto para usarlo con el método se obtiene un resultado inesperado (0 frente a nulo esperado).default(T)
palabra clave ha estado allí desde VS2005, pero creo que los parámetros predeterminados son una nueva característica de .NET 4. La forma fácil de evitarlo debería ser tener dos variantes, una que tome el parámetro y otra que no. Actualizaré la respuesta para que sea compatible con CLR 2.0. En cuanto al boxeo, ese es el puntodefault
. Serán datos 0 inicializados para un tipo de valor y nulos para todos los tipos de referencia. Un TReturn de un tipo de valor debe permanecer sin caja durante toda la función.x.Value
debe devolver nulo (si, por ejemplo,int?
era nulo) o el valor siint?
tiene un valor. Volver0
cuandoint? x = null
se pasa y se encajona al objeto es un caso extraño. He visto comprobaciones similares para tipos anulables en bibliotecas como nhibernate y linfu con fluidez (creo) para este caso específico, lo que le permite eliminar la restricción de clase como se sugirió anteriormente."Marque sus respuestas con la aceptación de incluir el código en el proyecto Codeplex".
¿Por qué? Todas las cosas en este sitio bajo CC-by-sa-2.5 , así que simplemente coloque su Proyecto de desbordamiento de extensión bajo la misma licencia y puede usarlo libremente.
De todos modos, aquí hay una función String.Reverse, basada en esta pregunta .
fuente
Me cansé de la tediosa verificación nula al extraer valores de MySqlDataReader, así que:
Por supuesto, esto podría usarse con cualquier SqlDataReader.
Tanto Hangy como Joe tuvieron algunos buenos comentarios sobre cómo hacer esto, y desde entonces tuve la oportunidad de implementar algo similar en un contexto diferente, así que aquí hay otra versión:
fuente
as
palabra clave para obtener un valor de un lector que permita nulo. Si combina el??
operador de fusión nulo con el operador as, incluso puede tener un valor predeterminado no nulo para ir directamente a un tipo de valor. Ver stackoverflow.com/questions/746767/…Me irritó que LINQ me dé un OrderBy que toma una clase que implementa IComparer como argumento, pero no admite pasar una función de comparación anónima simple. Lo rectifiqué.
Esta clase crea un IComparer a partir de su función de comparación ...
... y estos métodos de extensión exponen mis nuevas sobrecargas de OrderBy en enumerables. Dudo que esto funcione para LINQ to SQL, pero es genial para LINQ to Objects.
Puede poner esto en codeplex si lo desea.
fuente
Este es para MVC, agrega la capacidad de generar una
<label />
etiqueta a laHtml
variable que está disponible en todosViewPage
. Esperemos que sea útil para otros que intentan desarrollar extensiones similares.Utilizar:
Salida:
Código:
fuente
Convertir esto:
... dentro de esto:
... usando este método de extensión:
Más métodos de extensión ADO.NET: DbExtensions
fuente