DCSIMG
Extension Method - שלמה גולדברג (הרב דוטנט)
Sign in | Join | Help

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Browse by Tags

הפעלת Linq Queries על פקדים המכילים Collections ללא חשיפה של IEnumerable מתאים
25 November 11 11:25 AM | Shlomo | 2 comment(s)
אחד מהיכולות החזקות של השפה שאנחנו משתמשים בהם רבות זהו היכולת להפעיל Linq to Objects על כל מי שמממש את: IEnumerable<T> ב - windows forms ישנם הרבה פקדים המכילים collections - כמו TabControl, TreeView ועוד. הבעייה עם כל הפקדים הללו שהם חושפים את IEnumerable הרגיל, (ללא T) מה שגורם לכך שאי אפשר להפעיל עליהם שאילתות לינק. כדי לתקן זאת ניתן להוסיף Extension Method מתאים לכל פקד ולהמיר את ה - IEnumerable לאחד שתומך ב - Generic, לדוגמא: internal static class Extension { internal static IEnumerable...
Cast from Generic type
23 October 11 10:15 AM | Shlomo | 3 comment(s)
אחד הדברים המפריעים בעבודה עם 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 ))); } כדי לחסוך קצת זמן ולכתוב...
ListItemCollection.SelectedItems Extensions
17 April 11 09:46 AM | Shlomo | 2 comment(s)
במידה ואתם צריכים לקבל מאובייקט המכיל 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)
From string to bool in javascript
26 March 11 10:45 PM | Shlomo | 1 comment(s)
כששומרים משתנה בוליאני ב - 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...
Quick guide to LINQ (Language Integrated Query)
05 October 10 08:59 PM | Shlomo | 4 comment(s)
המדריך המהיר ל - LINQ. מטרת הפוסט: בסיומו של פוסט זה אתם תדעו לכתוב קוד LINQ בשני התחבירים שלו ותבינו למה כדאי לעבוד עם LINQ ומה זה נותן לנו בתור מפתחים. תוכן עניניים מה זה לינק ומה נותן לנו השימוש בו. לפני LINQ. var keyword Anonymous Types Extension Methods Lambda Expressions כתיבת קוד שמדמה LINQ תחביר LINQ Extension Methods Syntactic sugar PLINQ מה זה LINQ ומה נותן לנו השימוש בו. הרעיון המרכזי מאחורי השימוש ב – LINQ הוא להפסיק לכתוב "איך" ולהתחיל לכתוב "מה", כלומר כשאנחנו כותבים...
Add Flag and Remove Flag for enums
24 August 10 03:57 PM | Shlomo | 2 comment(s)
הדרך הקלה לשימוש ב - 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...
Max() => Sequence contains no elements
16 May 10 12:33 PM | Shlomo | with no comments
קריאה לפונקציית 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; }
מי האבא שלי
03 May 10 07:31 PM | Shlomo | 6 comment(s)
בדיקה האם אחד מהאבות בהיררכיה של הדף הוא מסוג מסויים. לפעמים אנחנו צריכים לדעת האם אנחנו נמצאים בתוך Control מסוים, דוגמא טובה לזה היא – האם אנחנו נמצאים בתוך UpdatePanel. למשל – בפוסט הזה הסברתי כיצד לפתור את בעיית רישום קבצי javascript מתוך user control. תוכלו לעיין שם כדי להבין אבל בגדול הפיתרון היה לכתוב משהו כזה. if (!Page.ClientScript.IsClientScriptIncludeRegistered( "key" )) { string url = ResolveClientUrl( "~/Scripts/file.js" ); Page.ClientScript.RegisterClientScriptInclude...
Add functionality using Document Object Model Prototypes (IE8)
20 April 10 10:54 PM | Shlomo | 1 comment(s)
אחד מהיכלות החדשות שיש לנו ב - IE8 זה ההוספה של prototype ל - DOM. אני לא אסביר בפוסט הזה מהו ה - prototype. אבל אם אתם לא מכירים את המושג (שקיים כבר הרבה לפני IE8) אני ממליץ לכם לקרוא את הפוסט הזה (לפחות את החלק הראשון) - או את הפוסט הזה - Object Oriented Programming in JavaScript ב - IE8 הוסיפו ל - DOM את היכולת לשנות ולהוסיף פונקציות בעזרת prototype. לדוגמא. אני מניח שהרבה פעמים יצא לכל אחד מכם לכתוב פונקציה שנקראת כך: function HideFunc(obj) { obj.style.display = 'none' ; } ומן הסתם השתשמתם...
Enum.GetNames - (array of enum not of string)
13 February 10 08:48 PM | Shlomo | 2 comment(s)
כשרוצים לרוץ בלולואה על כל ה - האפשרויות ב - enum כלשהו, בדרך כלל רואים קוד כזה string [] names = Enum .GetNames( typeof ( MyEnum )); foreach ( string item in names) { MyEnum myEnum = ( MyEnum ) Enum .Parse( typeof ( MyEnum ), item); // logic... } מה שעשיתי היה לקבל את כל מה שיש ב - enum כמערך של מחרוזות ואז בלולאה להמיר כל אחד ממנו למופע של ה - enum. כדי לא לכתוב את הקוד (המכוער) כל הזמן אני מעדיך לכתוב כך: MyEnum [] names = typeof ( MyEnum ).GetNames< MyEnum >(); foreach ( MyEnum item in...
string.ToLower ToTitleCase
24 January 10 05:20 PM | Shlomo | 1 comment(s)
חבר לעבודה ( רון כהן ) שאל אותי איך אפשר לקבל את הפונקציונליות של ToLower עבור האות הראשונה של כל מילה, לדוגמא shlomo goldberg יהפוך ל - Shlomo Goldberg. זה הקוד שנתתי לו string str = "shlomo goldberg" ; CultureInfo c = new CultureInfo ( "en-US" ); str = c.TextInfo.ToTitleCase(str); הוא כמובן הפך את זה ל - extension methods namespace System { public static class StringExtension { public static string ToTitleCase( this string str) { CultureInfo c = new CultureInfo ( "en-US"...
הגדרה של FormBorderStyle עבור טפסים שהם MDI
17 November 09 07:43 PM | Shlomo | 2 comment(s)
בתפוז עלתה השאלה הבאה: יש טופס אב ויוצרים בזמן ריצה מופעים של טפסי בן ומוספים אותם לאב - במקרה שהמאפיין FormBorderStyle מוגדר כ - none על טופס הבן, מה שיקרה בפועל שלשנייה אחת יראו את המסגרת ואז זה יעלם - השאלה כיצד מתפטרים מהמסגרת לתמיד. נניח שהקוד נראה ככה: private void button1_Click( object sender, EventArgs e) { Form2 f = new Form2 (); f.MdiParent = this ; f.Show(); } למעשה הבעייה נובעת מכך ש - windows מציירת כל הזמן את כל הפקדים שעל המסך - ולכן הדרך היחידה לא לראות את המסגרת היא להגיד למערכת...
String extension - IsNullOrEmpty - ToEnum (Enum.Parse)
24 September 09 06:00 PM | Shlomo | 3 comment(s)
אני משתמש די בקביעות עם שני extensions ל - string, וחשבתי לשתף אותם. הראשון: בדיקה האם מחרוזת אינה null או ריקה בדרך כלל מתבצעת בצורה הבאה string str; if (! string .IsNullOrEmpty(str)) { } היה הרבה יותר נחמד לולא היינו יכולים לשאול על ה - str - אבל מה לעשות שאולי ה - str הינו null (וזה שאלה מכשילה). השני: המרה ממחרוזת ל - enum מתבצעת בדרך כלל ככה: enum NyEnum { One, Two } NyEnum data = ( NyEnum ) Enum .Parse( typeof ( NyEnum ), "One" ); ולכן כתבתי את המחלקה הבאה: namespace System { public...
DataReader.GetValueOrDefault --> Extension for Extension
06 September 09 12:32 PM | Shlomo | with no comments
בהמשך לפוסט שהראה איך לקבל ערכי ברירת מחדל עבור עמודות שיכולות להיות NULL בבבסיס הנתונים. שלח לי חבר יקר ( בניהו) את ההצעה הבאה: public static T GetValueOrDefault<T>( this DbDataReader reader, int index) { if ( Convert .IsDBNull(reader[index])) { return default (T); } return (T)reader[index]; } public static T GetValueOrDefault<T>( this DbDataReader reader, string name) { if ( Convert .IsDBNull(reader[name])) { return default (T); } return (T)reader[name]; }
DataReader.GetValueOrDefault --> Nice Extension
04 September 09 12:14 PM | Shlomo | 2 comment(s)
בעבר כתבתי את הפוסט הזה על Extension ל - DataReader - שיודע לייצר אובייקט מכל שורה ב - reader. כאן אני אראה עוד תוספת נחמדה ל - DataReader. הרבה פעמים אנחנו יכולים לקבל NULL מה - reader, ואנחנו חייבים לבדוק בכל פעם האם זה לא DBNull, בעזרת ה - Extension הבא, הקוד יהיה יותר קריא. (הראשון עבור int והשני עבור string) public static T GetValueOrDefault<T>( this DbDataReader reader, int index, T defaultValue) { if ( Convert .IsDBNull(reader[index])) { return defaultValue; } return (T)reader[index...
More Posts Next page »