דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. האם יש דרך לקרוא לאובייקט ללא סוג?

האם יש דרך לקרוא לאובייקט ללא סוג?

מתוזמן נעוץ נעול הועבר ארכיון code613m
26 פוסטים 4 כותבים 1.2k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • A מנותק
    A מנותק
    avr416
    כתב ב נערך לאחרונה על ידי
    #4

    מצאתי כאן קישור איך להמיר טיפוס אנונימי לאובייקט קיים.
    אולם, הבעיה שלי היא שהטיפוס האנונימי שלי לא מתאים לאובייקטים שלי, כיון שהוא מאוחד משני אובייקטים.
    האם אין דרך אחרת אלא לכתוב מחלקה שכוללת בתוכה את כל המאפיינים של 2 האובייקטים, ואז להשתמש בקוד הנ"ל??
    ממש מוזר שאין דרך פשוטה לעשות זאת, הרי בטח זה מאד שימושי כשמריצים חיפוש בדטהבייס ורוצים לשלוף מידע מכמה טבלאות, ולהציג אותו ללקוח ולאפשר לו לייצא אותו, לא?
    תודה רבה ושבת שלום!

    פורסם במקור בפורום CODE613 ב04/09/2015 16:33 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • רחמיםר מנותק
      רחמיםר מנותק
      רחמים מורחק
      כתב ב נערך לאחרונה על ידי
      #5

      למה בכלל צריך את LINQ ?
      פשוט תעבור בלולאה על שני הרשימות ותשמור ברשימה שלישית את אלא שעומדים בתנאים
      מן הסתם זה יהיה פי מאה יותר מהר מאשר ש- LINQ עושה את זה.

      פורסם במקור בפורום CODE613 ב05/09/2015 22:39 (+03:00)

      תגובה 1 תגובה אחרונה
      0
      • A מנותק
        A מנותק
        avr416
        כתב ב נערך לאחרונה על ידי
        #6

        @רחמים

        למה בכלל צריך את LINQ ?
        פשוט תעבור בלולאה על שני הרשימות ותשמור ברשימה שלישית את אלא שעומדים בתנאים

        איך אני אשמור ברשימה שלישית? ליסט של איזה אובייקט זה יהיה??
        או שאתה מתכוון שאני אצור אובייקט שלישי שמאוחד (חלקית) משני הראשונים, ואליו אשמור אותם, זה נראה לי סתם מיותר לכתוב עוד מחלקה כבר עדיף להשתמש באובייקט אנונימי, לא???

        פורסם במקור בפורום CODE613 ב05/09/2015 23:35 (+03:00)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #7

          דבר ראשון אובייקט אנונימי זה לצרכים של תת שאילתה ודברים כאלה ש"לא שווים" תחזוקה של עיצוב מחלקה. זה עולה ביצועים טיפונת יותר ממלקה של ממש ותמיד יש לשקול אם לעשות צ'יק צ'ק מחלקונת שמכילה את המאפיינים הנדרשים.
          במידה וצריך לשלוח את התוצאות לפונקציה אחרת, לאחסן במשתנה וכדומה, אני בטוח שכדאי ליצור מחלקה בשביל זה.

          דבר שני מאוד קל לעשות קאסט בLINQ, או בסלקלט עצמו:

          select (object) new { d.Id, o.IdDonation,o.IsActive, d.FirstName, d.LastName,d.Gender, d.Adress, d.Tel, d.Email,
                                                    o.SumDonation, o.SumAllDonat, o.StartDonation, o.SumMonthDonat, o.ActualMonthlyDonation};
          

          או עם הפונקציה Cast אחרי הסלקט:

          listResult = ObservableCollection<object>(newlistDonors.Cast<Object>);
          

          אבל זה ממש לספורט כי זה ממש א הגיוני להמיר אובייקט אנונימי לסוג אובייקט, כי זה בלתי הפיך: לא תוכל לגשת לשום מאפיין אם לא דרך שיקוף שהוא יקר הן בביצועים הן בתחזוקה.

          פורסם במקור בפורום CODE613 ב05/09/2015 23:48 (+03:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          1
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #8

            @רחמים

            למה בכלל צריך את LINQ ?
            פשוט תעבור בלולאה על שני הרשימות ותשמור ברשימה שלישית את אלא שעומדים בתנאים
            מן הסתם זה יהיה פי מאה יותר מהר מאשר ש- LINQ עושה את זה.

            במקרים כאלה דוקא LINQ ינצח בקלות לולאה פרימיטבית. JOIN של LINQ משתמש במילון פנימי, ואילו בלולאה פרימטיבית אתה חייב לולאה פנימית שמחפשת כל פעם את האיבר, וזה פי שלוש לרעת הלולאה לפחות. אם תתחכם ותעשה מיון וחיפוש בינארי אזי תנצח, אבל רחוק מאוד מפי מאה (משהו כמו פי 10 וזה דוקא בהתפלגות טובה ובהרבה מאוד איברים).
            LINQ בד"כ מועדף בגלל קריאות וקלות תחזוקה. אבל גם בביצועים הוא בסדר ועלותו אם בכלל זניחה.

            פורסם במקור בפורום CODE613 ב06/09/2015 00:17 (+03:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            1
            • A מנותק
              A מנותק
              avr416
              כתב ב נערך לאחרונה על ידי
              #9

              דוד תודה רבה על ההרחבה בהסברים!!!
              קיבלתי, והוספתי מחלקה שלישית (עשיתי שהיא תירש מאחת מהמחלקות הראשונות, וככה נשאר לי רק להוסיף את המשתנים של המחלקה השניה :lol:
              זה בסדר? או שאסור לעשות ככה ?!?!

              ומה הכוונה שהjoin משתמש במילון פנימי?

              פורסם במקור בפורום CODE613 ב06/09/2015 00:30 (+03:00)

              תגובה 1 תגובה אחרונה
              0
              • רחמיםר מנותק
                רחמיםר מנותק
                רחמים מורחק
                כתב ב נערך לאחרונה על ידי
                #10

                אם אתה יורש רק כדי לחסוך הקלדה, אז לא עושים כך, אבל אם יש בזה צורך אז תירש למה לא.

                @דוד ל.ט.

                במקרים כאלה דוקא LINQ ינצח בקלות לולאה פרימיטבית. JOIN של LINQ משתמש במילון פנימי, ואילו בלולאה פרימטיבית אתה חייב לולאה פנימית שמחפשת כל פעם את האיבר, וזה פי שלוש לרעת הלולאה לפחות. אם תתחכם ותעשה מיון וחיפוש בינארי אזי תנצח, אבל רחוק מאוד מפי מאה (משהו כמו פי 10 וזה דוקא בהתפלגות טובה ובהרבה מאוד איברים).

                ההגיון אומר שכל דבר שהוא גנארי חייב לבדוק המון בדיקות תקינות, וחייב להיות גמיש וממילא הוא בוודאי הרבה איטי מאשר משהו שנבנה באופן יעודי.
                באיזה מילון הוא משתמש? גם אתה יכול להשתמש במילון?

                פורסם במקור בפורום CODE613 ב06/09/2015 00:57 (+03:00)

                תגובה 1 תגובה אחרונה
                1
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #11

                  @avr416

                  קיבלתי, והוספתי מחלקה שלישית (עשיתי שהיא תירש מאחת מהמחלקות הראשונות, וככה נשאר לי רק להוסיף את המשתנים של המחלקה השניה :lol:
                  זה בסדר? או שאסור לעשות ככה ?!?!

                  לא. ירושה זה יותר להרחבה של צורך קיים. פה אתה סתם צריך "מחסן".
                  אני הייתי יוצר מחלקה שיש לה שתי מאפיינים: תורם ותרומה.
                  וכעת אני חושב שהכי פשוט זה להשתמש עם מחלקה קיימת, שמה Tuple. שימושה היא ליצור סט של מאפיינים ללא יצירת מחלקה מתאימה. אז ככה:

                  public static ObservableCollection<Tuple<Donor, Donation>> listResult;
                  var newlistDonors = from o in donatFilter
                                       join d in AddTorem.donors on o.IdDonor equals d.Id
                                       select Tuple.Create(o, d);
                  
                  listResult =  new ObservableCollection<Tuple<Donor, Donation>>(newlistDonors);
                  

                  פורסם במקור בפורום CODE613 ב06/09/2015 10:59 (+03:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  1
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי
                    #12

                    @רחמים

                    ההגיון אומר שכל דבר שהוא גנארי חייב לבדוק המון בדיקות תקינות, וחייב להיות גמיש וממילא הוא בוודאי הרבה איטי מאשר משהו שנבנה באופן יעודי.
                    באיזה מילון הוא משתמש? גם אתה יכול להשתמש במילון?

                    אתה צודק בהכל חוץ מהמילה "הרבה". יש ליופי של LINQ תקורה, אבל שולית.
                    סוג המילון הוא Lookup (ממש דומה לDictionary). אתה יכול כמובן לראות: http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,581.
                    לא הבנתי מה הכוונה האם גם אני יכול. אגב אם כבר ממשים לבד יש ודאי שיפורים לעשות אבל מבזבזים את הכח והזמן לבנות ייעודית במקומות זניחים לגמרי.

                    פורסם במקור בפורום CODE613 ב06/09/2015 11:09 (+03:00)

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    תגובה 1 תגובה אחרונה
                    1
                    • A מנותק
                      A מנותק
                      avr416
                      כתב ב נערך לאחרונה על ידי
                      #13

                      @דוד ל.ט.

                      אני הייתי יוצר מחלקה שיש לה שתי מאפיינים: תורם ותרומה.
                      וכעת אני חושב שהכי פשוט זה להשתמש עם מחלקה קיימת, שמה Tuple. שימושה היא ליצור סט של מאפיינים ללא יצירת מחלקה מתאימה. אז ככה:

                      public static ObservableCollection<Tuple<Donor, Donation>> listResult;
                      var newlistDonors = from o in donatFilter
                                           join d in AddTorem.donors on o.IdDonor equals d.Id
                                           select Tuple.Create(o, d);
                      
                      listResult =  new ObservableCollection<Tuple<Donor, Donation>>(newlistDonors);
                      

                      טוב, התגברתי על העצלות :lol: וכתבתי מחלקה חדשה לגמרי, ואז ראיתי את ההודעה שלך :lol: :lol:
                      בכל אופן גם אם אני משתמש במחלקה שלי וגם אם אני משתמש בtuple אני מקבל בשורה האחרונה את הודעת השגיאה הבאה:
                      אין אפשרות לבצע המרה של אובייקט מסוג '<JoinIterator>d__14[Person.Donation,Person.Donor,System.Int32,System.Tuple2[Person.Donation,Person.Donor]]' לסוג 'System.Collections.ObjectModel.ObservableCollection1[System.Tuple2[Person.Donor,Person.Donation]]'.
                      כשהשתמשתי במחלקה שלי כתבתי select new ואת שם המחלקה, וכבר שם קיבלתי את השגיאה הנ"ל...
                      מה עושים????? :shock: :shock:
                      ותודה רבה רבה על כל העזרה!!!!

                      פורסם במקור בפורום CODE613 ב06/09/2015 11:16 (+03:00)

                      תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        כתב ב נערך לאחרונה על ידי
                        #14

                        אתה טועה בבניית הObservableCollection.
                        תראה איך כתבתי בשורה 6. ותראה איך אתה עשית.

                        פורסם במקור בפורום CODE613 ב06/09/2015 11:23 (+03:00)

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        תגובה 1 תגובה אחרונה
                        0
                        • dovidD מנותק
                          dovidD מנותק
                          dovid ניהול
                          כתב ב נערך לאחרונה על ידי
                          #15

                          @avr416

                          טוב, התגברתי על העצלות :lol: וכתבתי מחלקה חדשה לגמרי, ואז ראיתי את ההודעה שלך :lol: :lol:

                          זה היומיום של מתכנת טוב...
                          אני מכיר כאלה שלא כותבים שום דבר לחינם, ובגלל זה גם לא יוצא להם שוב דבר טוב.

                          פורסם במקור בפורום CODE613 ב06/09/2015 11:24 (+03:00)

                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                          תגובה 1 תגובה אחרונה
                          0
                          • A מנותק
                            A מנותק
                            avr416
                            כתב ב נערך לאחרונה על ידי
                            #16

                            @דוד ל.ט.

                            אתה טועה בבניית הObservableCollection.
                            תראה איך כתבתי בשורה 6. ותראה איך אתה עשית.

                            כבר שם הוא זרק לי את השגיאה בזמן הכתיבה ולכן ביצעתי המרה מפורשת...
                            אבל זה לא עזר לי והוא זורק לי את החריג בזמן ריצה 😢 😢

                            פורסם במקור בפורום CODE613 ב06/09/2015 11:26 (+03:00)

                            תגובה 1 תגובה אחרונה
                            0
                            • A מנותק
                              A מנותק
                              avr416
                              כתב ב נערך לאחרונה על ידי
                              #17

                              כתבתי כך:

                              var newlistDonors = from o in donatFilter
                                                                  join d in AddTorem.donors on o.IdDonor equals d.Id
                                                                  select Tuple.Create(o, d);
                              
                                              listResult = new ObservableCollection<Tuple<Donor, Donation>>((ObservableCollection<Tuple<Donor, Donation>>)newlistDonors);
                              

                              פורסם במקור בפורום CODE613 ב06/09/2015 11:28 (+03:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • dovidD מנותק
                                dovidD מנותק
                                dovid ניהול
                                כתב ב נערך לאחרונה על ידי
                                #18

                                @avr416

                                טוב, התגברתי על העצלות :lol: וכתבתי מחלקה חדשה לגמרי, ואז ראיתי את ההודעה שלך :lol: :lol:

                                אני מתנצל שלא שיתפתי אותך בטיפ נוסף פשוט מאוד (אני למדתי להשתמש בו לא מזמן):
                                אתה משנה את הnew לnew XXX כשהXXX זה שם מחלקה שאתה בוחר שעדיין לא קיימת. כמובן שהשם נצבע באדום. אתה מקיש Ctrl+. בעוד הסמן על המילה. מופיע לך תפריט ואז לחץ אנטר. נוצרת מחלקה חדשה עם כל המאפיינים.. סילחה שהחמצתי מלומר לך זאת בהתחלה.

                                פורסם במקור בפורום CODE613 ב06/09/2015 11:33 (+03:00)

                                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                תגובה 1 תגובה אחרונה
                                3
                                • dovidD מנותק
                                  dovidD מנותק
                                  dovid ניהול
                                  כתב ב נערך לאחרונה על ידי
                                  #19

                                  @avr416

                                  @דוד ל.ט.
                                  אתה טועה בבניית הObservableCollection.

                                  תראה איך כתבתי בשורה 6. ותראה איך אתה עשית.

                                  כבר שם הוא זרק לי את השגיאה בזמן הכתיבה ולכן ביצעתי המרה מפורשת...
                                  אבל זה לא עזר לי והוא זורק לי את החריג בזמן ריצה 😢 😢

                                  הObservableCollection מקבל בבנאי אוסף מהסוג הגנרי שלו.
                                  לא צריך לעשות המרה, וגם אי אפשר! ממתי אוסף הוא צאצא של ObservableCollection?! - קאסטינג זה להפוך מחלקה יורשת למחלקה מורישה. כמו לשנות Button של WPF לControl שזה מאבות אבותיו...

                                  פורסם במקור בפורום CODE613 ב06/09/2015 11:36 (+03:00)

                                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                  תגובה 1 תגובה אחרונה
                                  1
                                  • A מנותק
                                    A מנותק
                                    avr416
                                    כתב ב נערך לאחרונה על ידי
                                    #20

                                    @דוד ל.ט.

                                    אני מתנצל שלא שיתפתי אותך בטיפ נוסף פשוט מאוד (אני למדתי להשתמש בו לא מזמן):
                                    אתה משנה את הnew לnew XXX כשהXXX זה שם מחלקה שאתה בוחר שעדיין לא קיימת. כמובן שהשם נצבע באדום. אתה מקיש Ctrl+. בעוד הסמן על המילה. מופיע לך תפריט ואז לחץ אנטר. נוצרת מחלקה חדשה עם כל המאפיינים.. סילחה שהחמצתי מלומר לך זאת בהתחלה.

                                    אין לך מה להתנצל :smile: זה ממש ממש חזק!!!

                                    @דוד ל.ט.

                                    הObservableCollection מקבל בבנאי אוסף מהסוג הגנרי שלו.
                                    לא צריך לעשות המרה, וגם אי אפשר! ממתי אוסף הוא צאצא של ObservableCollection?! - קאסטינג זה להפוך מחלקה יורשת למחלקה מורישה. כמו לשנות Button של WPF לControl שזה מאבות אבותיו...

                                    החכמתי!! לא חשבתי שהמרה זה דווקא ממוריש ליורש...
                                    בכל אופן בלא המרה הוא זורק לי את אותה השגיאה:
                                    Argument 1: cannot convert from 'System.Collections.Generic.IEnumerable<System.Tuple<Person.Donation, Person.Donor>>' to 'System.Collections.Generic.List<System.Tuple<Person.Donor, Person.Donation>>'
                                    כיצד אפשר להתגבר על כך?
                                    ותודה רבה רבה על כל ההשקעה בעניית התשובות וההסברה!!

                                    פורסם במקור בפורום CODE613 ב06/09/2015 15:45 (+03:00)

                                    תגובה 1 תגובה אחרונה
                                    0
                                    • dovidD מנותק
                                      dovidD מנותק
                                      dovid ניהול
                                      כתב ב נערך לאחרונה על ידי
                                      #21

                                      כל פעם שגיאה אחרת... אני לא יודע מה אתה מנסה שם, אבל אנא, קוד כזה עובד? יש שגיאה?

                                      public static ObservableCollection<Tuple<Donor, Donation>> listResult;
                                      var newlistDonors = from o in donatFilter
                                                           join d in AddTorem.donors on o.IdDonor equals d.Id
                                                           select Tuple.Create(o, d);
                                      
                                      listResult =  new ObservableCollection<Tuple<Donor, Donation>>(newlistDonors);
                                      

                                      פורסם במקור בפורום CODE613 ב06/09/2015 16:10 (+03:00)

                                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                      תגובה 1 תגובה אחרונה
                                      0
                                      • A מנותק
                                        A מנותק
                                        avr416
                                        כתב ב נערך לאחרונה על ידי
                                        #22

                                        לא...
                                        זה מחזיר את אותה שגיאה שבהודעה הקודמת...
                                        הפונקציה של החיפוש מחזירה ערך גנרי מסוג IEnumrable
                                        ולכן הוא מציג הודעת שגיאה שהוא לא יכול להמיר ערך כזה לערך מסוג list (דהיינו אוברסלברקולקשיין...)

                                        פורסם במקור בפורום CODE613 ב06/09/2015 16:18 (+03:00)

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • A מנותק
                                          A מנותק
                                          avr416
                                          כתב ב נערך לאחרונה על ידי
                                          #23

                                          זה מוזר.. כי donatFilter זהו ליסט מסוג אובסרבייבל ואין לו בעיה לקבל לתוכו את התוצאות של פונקציית החיפוש שהיא מחזירה ערך מסוג IEnumerable.
                                          אבל עכשיו כשאני משתמש בlinq הוא לא מוכן לקחת את המשתנה שנוצר מסוג IEnumerable ולשים אותו בתוך משתנה מסוג observable..

                                          פורסם במקור בפורום CODE613 ב06/09/2015 16:30 (+03:00)

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום