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

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

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

שאלות עמרציות בסישארפ

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 3 כותבים 615 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • avrahamA מנותק
    avrahamA מנותק
    avraham
    כתב ב נערך לאחרונה על ידי
    #1
    1. מה פשר הסינטקס הזה:

      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiAddress + urlParameters);
      long JSDateNow = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds; אם כבר קבעתי לו סוג באתחול, למה צריך להכניס עוד פעם את הסוג בסוגריים? ולמה בלי זה זה מביא שגיאה?

    2. אם יש int מוקצה, ואני רוצה להכפיל אותו עד כדי שיגיע לדרגת long, אני מקבל מספר שלילי. אפילו אם אני לא מכניס את התוצאה לתוך int אלא לתוך long חדש. כלומר:

      int i = 1535468465;
      long l = i * 568465465;
      Debug.WriteLine(l); // -1253193111

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

      if(config.one)
      זה פולט שגיאה, ורק אם אני מפרש

      if(config.one== true)
      זה עובד?

    פורסם במקור בפורום CODE613 ב26/04/2017 00:01 (+03:00)

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

      1- 2. אכן כך היינו רגילים ב VB ועוד שפות, אבל בC# אין המרה מטיפוס לטיפוס במשתמע, אלא רק בצורה מפורשת, לכן צריך לעשות cast ולזה בא הטיפוס בתוך הסוגריים.

      1. נסיתי אצלי וזה כן עובד.

      פורסם במקור בפורום CODE613 ב26/04/2017 07:24 (+03:00)

      תגובה 1 תגובה אחרונה
      2
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3
        1. זה מושגי type checked וcasting. קאסטינג זה שבירה טיפוס לאחר - זה סיכון לשגיאת זמן ריצה או לאיבוד נתונים ורוצים שתהא מודע לזה.
          גם אם קבעת באתחול, אתה יכול לטעות במהלך הקוד ולהציב שם ערך לא תקין, לכן יש כלל שמחייב אותך לראות מול העיניים שאתה ממיר כל הצבה.
          (מבחינת נוחות ויזואלית, כשזה בשורה אחת ההצהרה והאתחול זה נח לכתוב var ולא לראות את הטיפוס כתוב פעמיים...).\

        המושג קאסטינג כולל שתי מצבים:
        א. הצבה של מופע ממחלקת בן שמוחזק ע"י משתנה מסוג אב למשתנה מסוג הבן. (זה השורה הראשונה - הWebRequest זה מחלקת אב שיש לה מתודה סטטית בשם Create שמחזירה מופע של אחד מבניה: HttpWebRequest, FtpWebRequest וכו'. בגלל הטיפוסיות הקשוחה הפונקציה Create מחזירה WebRequest שזה אב של המחלקות הבנים אך זה לא ספציפית הבן, מה שמחייב אותך כמפתח שיודע (לפעמים) את הבן הספציפי לעשות קאסט כדי להשתמש בחברים (מתודות ומאפייינים) שיש רק לבן הספציפי).
        ב. המרה של טיפוס אחד לאחר בידיעה שהמחלקה החדשה תומכת בהמרה הזו. אתה כמפתח מחלקה יכול לכתוב מתודה שתטפל בהמרה של טיפוס כל שהוא לטיפוס שלך, וזה מה שעשה המפתח של מחלקת long - הוא עשה שהיא תוכל לקבל double שעובר קאסטינג אליה. וזה השורה השניה.

        1. כשאתה כותב int * int חוזר תוצאת int, ובכפל בשורה השניה שתי הצדדים הם int (כל מספר בקוד שאיננו גבוה וללא שברים הוא מפורש כint). ההשמה לlong היא אחרי שכבר בוצעה ההכפלה (זה כלל בהמון שפות תכנות שקודם מבוצע הביטוי ואח"כ ההשמה). אם אתה רוצה שהכפל יחזיר long אתה צריך שהמכפיל יהיה long, או ע"י השמה או ע"י ציון אחרי המספר של האות L. ואז הכלל הוא שמספר כפול מספר בעל זיכרון גדול יותר התוצאה תהא מסוגו.
          ככה:

          int i = 1535468465;
          long l = 568465465;
          l = l* i;
          Debug.WriteLine(l);
          או ליטרל לונג שזה ע"י הוספת האות L בסוף:

          int i = 1535468465;
          long l = i * 568465465L;
          Debug.WriteLine(l);

        2. אני לא מספיק מכיר dynamic אבל אכן ניסיתי ועבד לי כפי שרחמים ציין. אולי תראה כמה שורות קוד נוספות שנוכל להתחקות אחרי העניין המעניין.

        פורסם במקור בפורום CODE613 ב26/04/2017 10:17 (+03:00)

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

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

        תגובה 1 תגובה אחרונה
        2
        • avrahamA מנותק
          avrahamA מנותק
          avraham
          כתב ב נערך לאחרונה על ידי
          #4

          תודה רבה!

          זה הקוד של הדיינמיק:

          public static dynamic config;
                      config = JsonConvert.DeserializeObject<dynamic>(
                          File.ReadAllText(configPath)
                      );
                      MessageBox.Show(config.one.ToString()); //true
                      if (config.one) MessageBox.Show("True");
                      else MessageBox.Show("false");
          

          וזו השגיאה:

          An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll
          
          Additional information: לא ניתן להמיר באופן מפורש את הסוג 'Newtonsoft.Json.Linq.JValue' ל- 'bool'. קיימת המרה מפורשת (האם חסרה המרה?)
          

          פורסם במקור בפורום CODE613 ב26/04/2017 12:34 (+03:00)

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

            אז זהו זה לא bool זה JValue ומהסיבה שהזכרתי שC# דורש המרה מפורשת

            פורסם במקור בפורום CODE613 ב26/04/2017 12:46 (+03:00)

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

              התשובה נעוצה בספריה של JSON. הם לא משימים בערך ערך פרימיטיבי של bool אלא JValue .
              הסיבה שעם אופרטור == זה עובד זה בגלל שהם דרסו את האופרטור הזה שישווה לערך הנכון.

              פורסם במקור בפורום CODE613 ב26/04/2017 12:53 (+03:00)

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

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

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

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

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

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