קבלת הנתיב המלא באפליקציית MVC וב – WebForms

יום ראשון, מרץ 10, 2013

לפעמים צריך לקבל נתיב מלא לכתובת אינטרנט, לדוגמא כדי לשלוח במייל. באפליקציית MVC הקוד יראה כך: Code Snippet public static class UrlHelperExtension {     public static string AbsolutePath(this UrlHelper url, string virtualPath)     { ...
תגיות: , , ,
אין תגובות

SerializationInfo TryGetValue

יום שלישי, ינואר 29, 2013

כתבתי מספר Extensions עבור מחלקת SerializationInfo. Code Snippet namespace System.Runtime.Serialization {     public static class SerializationExtensions     {         public static IEnumerable<SerializationEntry> AsEnumerator(this SerializationInfo info) ...
אין תגובות

IEnumerable.IndexOf

יום רביעי, דצמבר 19, 2012

כתבתי Extensions חביב שנראה כך: namespace System.Collections.Generic {     public static class IEnumerableExtensions     {         public static int IndexOf<T>(this IEnumerable<T> collection, T item)         {             int index = -1; ...
תגיות: ,
4 תגובות

הפעלת Linq Queries על פקדים המכילים Collections ללא חשיפה של IEnumerable מתאים

יום שישי, נובמבר 25, 2011

  אחד מהיכולות החזקות של השפה שאנחנו משתמשים בהם רבות זהו היכולת להפעיל Linq to Objects על כל מי שמממש את:IEnumerable<T>     ב - windows forms ישנם הרבה פקדים המכילים collections - כמו TabControl, TreeView ועוד.   הבעייה עם כל הפקדים הללו שהם חושפים את IEnumerable הרגיל, (ללא T) מה שגורם לכך שאי אפשר להפעיל עליהם שאילתות לינק.     כדי לתקן זאת ניתן להוסיף Extension Method מתאים לכל פקד ולהמיר את ה - IEnumerable  לאחד שתומך ב - Generic, לדוגמא:   internal static class Extension {     internal static IEnumerable<TabPage> AsEnumerator(this TabControl.TabPageCollection collection)     {         foreach (TabPage item in collection)         {             yield return item;         }     }      ...
2 תגובות

Cast from Generic type

יום ראשון, אוקטובר 23, 2011

  אחד הדברים המפריעים בעבודה עם Generic Type, שאי אפשר לעשות להם casting לאובייקטים אחרים, לדוגמא:   static void MyFunc<T>(T item) {     Work((Entity)item); }   static void Work(Entity item) {   }   הקוד הא יזרוק שגיאה של:   Cannot convert type 'T' to 'ConsoleApplication1.Entity'   כדי לבצע בכל זאת המרה בין האובייקטים ניתן להשתמש ב - Convert.ChnageType בצורה הבאה:   static void MyFunc<T>(T item) {     Work((Entity)Convert.ChangeType(item, typeof(Entity))); }     כדי לחסוך קצת זמן ולכתוב קוד בצורה יפה יותר, כתבתי את ה - Extension Method הבא   public static class ObjectExtension {     public static T ChangeType<T>(this object obj)     {         return (T)Convert.ChangeType(obj, typeof(T));     } }     וכעת ניתן לכתוב קוד כזה:   static void MyFunc<T>(T item) {     Work(item.ChangeType<Entity>()); }      
תגיות: , ,
3 תגובות

ListItemCollection.SelectedItems Extensions

יום ראשון, אפריל 17, 2011

  במידה ואתם צריכים לקבל מאובייקט המכיל ListItemCollection (כמו CheckBoxList ודומיו) את כל הערכים שהמשתמש בחר, תוכלו להשתמש בפונקצייה הבאה   public static class ListItemCollectionExtensions {     public static IEnumerable<ListItem> SelectedItems(this ListItemCollection collection)     {         foreach (ListItem item in collection)         {             if (item.Selected)             {                 yield return item;             }         }     }       בפוסט הבא אני אסביר מה זה ה - yield למי שלא מכיר (זה קיים מ - C#2.0)
2 תגובות

From string to bool in javascript

יום שבת, מרץ 26, 2011

  כששומרים משתנה בוליאני ב - cookie או ב - storage זה נשמר כמחרוזת, הבעייה כשמנסים להוציא את הערך ולשים אותו למשל ב - checkbox תמיד ה - checkbox יהיה מסומן מכיוון שגם אם הערך הוא "false" נקבל true, בגלל שכתיבה של הקוד הזה:   chk.checked = "false";   זהה לקוד הבא: chk.checked = !("false" == true); או לזה: chk.checked = !("false" == false);     כדי להמיר את הערך (שנשמר כמחרוזת) ניתן להרחיב את האובייקט String.   String.prototype.ToBool = function () {     return this.toLowerCase() == "false" ? false : true; }   ואז נוכל לכתוב   chk.checked = "false".ToBool();
תגובה אחת

Quick guide to LINQ (Language Integrated Query)

יום שלישי, אוקטובר 5, 2010

המדריך המהיר ל - LINQ. מטרת הפוסט: בסיומו של פוסט זה אתם תדעו לכתוב קוד LINQ בשני התחבירים שלו ותבינו למה כדאי לעבוד עם LINQ ומה זה נותן לנו בתור מפתחים.     תוכן עניניים מה זה לינק ומה נותן לנו השימוש בו. לפני LINQ. var keyword Anonymous Types Extension Methods Lambda Expressions כתיבת קוד שמדמה LINQ תחביר LINQ Extension Methods Syntactic sugar PLINQ   מה זה LINQ ומה נותן לנו השימוש בו. הרעיון המרכזי מאחורי השימוש ב – LINQ הוא להפסיק לכתוב "איך" ולהתחיל לכתוב "מה", כלומר כשאנחנו כותבים קוד אנחנו רגילים לכתוב קוד שהמשמעות שלו הם הוראות למחשב איך לבצע את מה שאנחנו רוצים לעשות, למשל אם אנחנו רוצים לכתוב קוד שמוצא את כל המספרים הזוגיים...
8 תגובות

Add Flag and Remove Flag for enums

יום שלישי, אוגוסט 24, 2010

  הדרך הקלה לשימוש ב - Enums שמוגדרים עם Flags     כשקראתי את הפוסט של עידו על הפונקצייה החדשה של Enum בשם HasFlag לא הבנתי למה הם לא הוסיפו גם Add ו - Remove.   חיפוש קצר בגוגל הביא אותי לכאן והנה לנו שני Extensions חדשים לעבודה עם Enum.     namespace System {     public static class EnumExtension     {         public static T AddFlag<T>(this Enum type, T value)         {             return (T)(object)(((int)(object)type | (int)(object)value));         }           public static T RemoveFlag<T>(this Enum type, T value)         {             return (T)(object)(((int)(object)type & ~(int)(object)value));         }     } }   והשימוש פשוט ביותר     enum MyEnum {     A = 1,     B = 2,     C = 4 }     MyEnum...
3 תגובות

Max() => Sequence contains no elements

יום ראשון, מאי 16, 2010

  קריאה לפונקציית Max או פונקציית Min כשהמערך ריק תתרסק עם השגיאה "Sequence contains no elements"     אף פעם לא הבנתי למה אין MaxOrDefault עד שלבסוף מצאתי את הפוסט הבא (שמביא את הקוד הבא)     public static int MaxOrDefault<TSource>(this IEnumerable<TSource> source,                                         Func<TSource, int> selector,                                         int defaultValue) {     if (source.Any<TSource>())         return source.Max<TSource>(selector);       return defaultValue; }
תגיות: ,
אין תגובות