Articles of extension methods

Metodi di estensione statica

Possibile duplicato: Posso aggiungere metodi di estensione a una class statica esistente? C’è un modo per aggiungere un metodo di estensione statico a una class. in particolare voglio sovraccaricare Boolean.Parse per consentire un argomento int.

Posso “moltiplicare” una stringa (in C #)?

Supponiamo che io abbia una stringa, per esempio, string snip = “”; Voglio fondamentalmente scriverlo più volte, a seconda di alcuni valori interi. string snip = “”; int multiplier = 2; // TODO: magic code to do this // snip * multiplier = “”; EDIT: So che posso facilmente scrivere la mia funzione per implementare […]

In C #, cosa succede quando chiami un metodo di estensione su un object nullo?

Il metodo viene chiamato con un valore nullo o fornisce un’eccezione di riferimento null? MyObject myObject = null; myObject.MyExtensionMethod(); // <– is this a null reference exception? Se questo è il caso, non avrò mai bisogno di controllare il mio parametro ‘this’ per null?

Imansible usare ref e out per il primo parametro (“questo”) nei metodi di estensione?

Perché è vietato chiamare il Extension Method con il modificatore di ref ? Questo è ansible: public static void Change(ref TestClass testClass, TestClass testClass2) { testClass = testClass2; } E questo no: public static void ChangeWithExtensionMethod(this ref TestClass testClass, TestClass testClass2) { testClass = testClass2; } Ma perché?

Tipi anonimi – Esistono caratteristiche di distinzione?

C’è qualcosa da usare, per determinare se un tipo è in realtà un tipo anonimo? Ad esempio un’interfaccia, ecc.? L’objective è creare qualcosa come il seguente … //defined like… public static T Get(this IAnonymous obj, string prop) { return (T)obj.GetType().GetProperty(prop).GetValue(obj, null); } //… //And then used like… var something = new { name = “John”, […]

Converti stringa in tipo nullable (int, double, ecc …)

Sto tentando di eseguire una conversione dei dati. Sfortunatamente, gran parte dei dati è in stringhe, dove dovrebbe essere int o double, ecc … Quindi quello che ho è qualcosa di simile: double? amount = Convert.ToDouble(strAmount); Il problema con questo approccio è se strAmount è vuoto, se è vuoto, voglio che diventi nullo, quindi quando […]

Come funzionano i metodi di estensione?

Voglio fare un metodo di estensione in Unity3d per la class Vector3. Ma non sembra proprio che lo capisca. Questo è quello che ho: public static class ExtensionMethods{ public static Vector3 MaxValue(this Vector3 _vec3) { return new Vector3(float.MaxValue,float.MaxValue,float.MaxValue); } } Ora voglio creare un Vector3.MaxValue come float.MaxValue con questa riga di codice: Vector3 closestPoint = […]

Nessuna inferenza di tipo con metodo di estensione generico

Ho il seguente metodo: public static TEventInvocatorParameters Until (this TEventInvocatorParameters p, Func breakCond) where TEventInvocatorParameters : EventInvocatorParameters where TEventArgs : EventArgs { p.BreakCondition = breakCond; return p; } E questa class public class EventInvocatorParameters where T : EventArgs { public Func BreakCondition { get; set; } // Other properties used below omitted for brevity. } […]

Timeout Pattern – Quanto pessimo è Thread.Abort davvero?

Ho letto su vari siti Web che Thread.Abort non è molto buono da usare. In questo caso, come si implementa un pattern di timeout? Ad esempio, ho letto che MS usa il modello qui sotto (che ho avvolto in un metodo di estensione) in tutto il framework. Personalmente, penso che questa sia un’estensione piuttosto interessante, […]

Quali sono i vantaggi dei metodi di estensione trovati?

Un “non credente” di C # mi chiedeva quale fosse lo scopo dei metodi di estensione. Ho spiegato che è quindi ansible aggiungere nuovi metodi agli oggetti che sono già stati definiti, soprattutto quando non si possiede / controllo la sorgente sull’object originale. Ha sollevato “Perché non aggiungere un metodo alla tua class?” Andiamo in […]