Oggi ho avuto la necessità di trovare un modo rapido per determinare a livello di codice se un dato numero intero (Int32) fosse un multiplo di un altro numero intero: nello specifico ne avevo bisogno per costruire una struttura HTML basata su griglia, ma immagino che ci siano un sacco di scenari quando tale caratteristica potrebbe essere utile.
Per questo motivo ho creato una helper class molto semplice contenente un paio di Extension Method che possono essere utilizzati per verificare se un dato int (che chiameremo multiple) è un multiplo di un altro int (che chiameremo dividend): per verificare tale condizione ho utilizzato l'operatore modulo (%), che restituisce il resto risultante a seguito di una divisione tra due numeri: se il resto risultante dalla divisione multiple/dividend è pari a zero significa che il multiplo è divisibile per il dividendo, e viceversa.
Ecco la classe contenente gli extension method:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public static class IntExtensions { /// <summary> /// Returns TRUE if [multiple] is a multiple of [dividend] by dividing [multiple]/[dividend] /// and check for a remainder of zero. /// </summary> /// <param name="multiple">the number that could be a multiple of [dividend]</param> /// <param name="dividend">the number that could be a dividend of [multiple]</param> /// <returns>TRUE if [multiple] is a multiple of [dividend], FALSE otherwise.</returns> public static bool IsMultipleOf(this int multiple, int dividend) { return (multiple % dividend) == 0; } /// <summary> /// Returns TRUE if [dividend] is a multiple of [multiple] by dividing [multiple]/[dividend] /// and check for a remainder of zero. /// </summary> /// <param name="dividend">the number that could be a dividend of [multiple]</param> /// <param name="multiple">the number that could be a multiple of [dividend]</param> /// <returns>TRUE if [dividend] is a dividend of [multiple], FALSE otherwise.</returns> public static bool IsDividendOf(this int dividend, int multiple) { return multiple.IsMultipleOf(dividend); } } |
Come si può vedere osservando il codice, la classe contiene due metodi basati sulla medesima logica:
- IsMultipleOf(), che restituisce TRUE se il primo int è un multiplo del secondo e FALSE in caso contrario.
- IsDividendOf(), che agisce come il reciproco del precedente, restituendo TRUE se il primo int è un dividendo del secondo e FALSE in caso contrario.
Nell'improbabile caso in cui non sappiate come utilizzare gli Extension Method all'interno del vostro codice, consiglio di leggere questo articolo.
Se invece non vi piace lavorare con gli Extension Methods e preferite un approccio più convenzionale, ecco lo stesso codice sorgente scritto all'interno di una normale helper class contenente due metodi statici:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public static class IntUtil { /// <summary> /// Returns TRUE if [multiple] is a multiple of [dividend] by dividing [multiple]/[dividend] and check for a remainder of zero. /// </summary> /// <param name="multiple">the number that could be a multiple of [dividend]</param> /// <param name="dividend">the number that could be a dividend of [multiple]</param> /// <returns>TRUE if [multiple] is a multiple of [dividend], FALSE otherwise.</returns> public static bool IsMultipleOf(int multiple, int dividend) { return (multiple % dividend) == 0; } /// <summary> /// Returns TRUE if [dividend] is a multiple of [multiple] by dividing [multiple]/[dividend] and check for a remainder of zero. /// </summary> /// <param name="dividend">the number that could be a dividend of [multiple]</param> /// <param name="multiple">the number that could be a multiple of [dividend]</param> /// <returns>TRUE if [dividend] is a dividend of [multiple], FALSE otherwise.</returns> public static bool IsDividendOf(int dividend, int multiple) { return IsMultipleOf(multiple, dividend); } } |
Conclusioni
Per il momento è tutto: mi auguro che questa helper class possa essere d'aiuto ad altri sviluppatori C# alla ricerca di un modo pratico e veloce per determinare se un numero intero è un multiplo (o un dividendo) di un altro. Alla prossima!