Posts

Showing posts with the label C# limbaj

Conversie data pentru cultura romana (ro-RO)

Vreau sa convertesc date calendaristice din cultura romana (ro-RO) din string in DateTime. Datele sunt de genul 8 Oct 2008, 9 Oct 2008, 12 Dec 2008. DateTime.TryParseExact accepta formatul "d MMM yyyy" , numai ca pentru cultura romana datele trebuie sa fie de forma 8 Oct. 2008, 9 Oct. 2008, 12 Dec. 2008 (cu punct dupa luna). Obtin expresia regulata pentru gasirea lunii din data, iar dupa luna inserez punctul. Pentru asta am nevoie de un MatchEvaluator care e un delegat cu signatura delegate string MatchEvaluator(Match m) static string Evaluator(Match match) { return match.ToString() + "."; } Evolutia pointerilor la functii incepand de la C# 1.0 pana la C# 3.0 e una pozitiva, in sensul claritatii codului. Daca in 1.0 trebuia sa scrii efectiv metoda ca membru al unei clase, iar in 2.0 nu e tocmai naturala inserararea codului printre parametri, in 3.0 expresiile lambda simplifica mult tehnica. var strDate = "8 Oct 2008"; var regForReplace = new Regex...

null == null ?

Test: T - SQL: if ( null = null ) print 'null == null' else print 'null != null' C#: Console.WriteLine(null == null); Ce afiseaza fiecare? Si de ce?

HTML Parser sau Expresii Regulate

Extrag informatie dintr-o pagina si ma intreb cum anume sa procedez. Sa folosesc expresii regulate sau un parser html. Norocul meu e ca am gasit unul deja implementat de un anume tip Alex Chudnovsky , iar .Net imi ofera suport si pentru expresii regulate. Am luat ca test prima pagina a sitului ejobs, din care vreau sa extrag lista de orase din tagul HTML select . <select name="oras" class="input12" style="width:130px;" > <option value="">Toate orasele</option> <option value="262" >Abrud</option> ... <option value="298" >Zlatna</option> </select> Expresii Regulate Am avut nevoie de doua expresii regulate. Una pentru a extrage toate tagurile <option></option> din acel <select> (?<selectOrasInput> // constructie pentru a marca grupul in RegExp <select //inceput de tag ((?:.|\n)*?) //orice intre t...

Path.Combine - C# 3.0 Extension Method

O data cu C# 3.0 au venit si metodele extensie. Sunt foarte utile cand se vrea a se extinde o clasa care nu poate fi mostenita cum e clasa string. Un alt avantaj e ca schimba notatia prefix a metodelor statice cu una infix, ceea ce face codul mult mai clar si mai usor de scris. De exemplu metoda statica Combine din clasa Path concateneaza doua stringuri pentru a obtine o cale fizica valida. Pentru doua stringuri e OK, dar atunci cand se combina mai mult de doua stringuri deja incepi sa numeri paranteze. public static class PathExtension { public static string Combine(this string instance, string path2) { return Path.Combine(instance, path2); } } class Program { static void Main(string[] args) { string root = "C:\\"; string mainFolder = "Files"; string subFolder = "Backup"; string fileName = "today.xml"; // notatie prefix Console.WriteLine( Path.Combine( Path.Combine( Path.Combine(root, mainFolder),subFolder),fileName)...

yield keyword

using System; using System.Collections; using System.Collections.Generic; namespace YieldDemo { public static class YieldDemo { /// /// Filtrarea unui sir de stringuri cu yield /// /// /// public static IEnumerable NamesWitchStartsWithALetter(string[] names) { foreach ( string name in names ) if ( name.StartsWith ( "A" ) ) yield return name; } /// /// crearea unui iterator pentru un numar limitat de patrate perfect /// /// /// public static IEnumerable<int> Squares(int squaresCount) { int sqCounter = 1; while (sqCounter <= squaresCount) { yield return sqCounter * sqCounter; sqCounter++; } } /// <summary> /// iterator pentru primele n numere din sirul Fibonacci /// </summary> ...

Operatorii is si as

Costul operatorilor as is is static void Main(string[] args) { object obj = new string('s', 1); IsDemo(obj); AsDemo(obj); ExplicitDemo(obj); } static void IsDemo(object str) { string local = null; if (str is string) { local = (string)str; } } .method private hidebysig static void IsDemo(object str) cil managed { // Code size 29 (0x1d) .maxstack 2 .locals init ([0] string local, [1] bool CS$4$0000) IL_0000: nop IL_0001: ldnull IL_0002: stloc.0 IL_0003: ldarg.0 -- parametrul este incarcat si se testeaze daca este de tip System.String IL_0004: isinst [mscorlib]System.String IL_0009: ldnull -- se incarca pe stiva rezultatul operatiei IL_0004 > IL_0009 (in acest caz e 1) IL_000a: cgt.un IL_000c: ldc.i4.0 IL_000d: ceq -- se calculeaza IL_000a == IL_000a (adica 1 == 0) si se pastreaza rezultatul in loc.1 IL_000f: stloc.1 IL_0010: ldloc.1 -- daca este ...

Orice este un obiect

using System; namespace Namespace { public interface IObject { void MyToString(); } public class MyObject : IObject { public void MyToString(){} } public class Program { static void SomeFunction(object a, object b, IObject c, MyObject d) { Int32 i = (int)a; MyObject obj_b = b as MyObject; MyObject obj_bb = (MyObject)b; IObject iobj_b = (IObject)b; MyObject obj_c = (MyObject)c; MyObject obj_cc = c as MyObject; IObject iobj_d = d as MyObject; IObject iobj_dd = d; IObject iobj_ddd = (MyObject)d; } static void Main(string[] args) { Int32 i = 3; MyObject myobj = new MyObject(); ...