DCSIMG
ArgumentOutOfRangeException - Value is not valid for OracleType: 0. Parameter name: oracleType - שלמה גולדברג (הרב דוטנט)

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

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

ArgumentOutOfRangeException - Value is not valid for OracleType: 0. Parameter name: oracleType

 

אם קבלתם את ההודעה הבאה:
Value is not valid for OracleType: 0. Parameter name: oracleType
 
מן הסתם כתבתם את הקוד הבא

OracleParameter param = new OracleParameter("name", 0);

 
מה שאתם צריכים לעשות זה אחד מהשניים
 

int num = 0;

OracleParameter param = new OracleParameter("name", num

 

OracleParameter param = new OracleParameter("name", Convert.ToInt32(0));

 
 
זה לא יעבוד
 

OracleParameter param = new OracleParameter("name", (int)0);

 
הסיבה לשגיאה זה הדרך שבה הם כתבו את ה - overload של הפונקציות, שימו לב: (הפונקציות איך שהם הוגדרו)
 

public OracleParameter(string name, object value);

public OracleParameter(string name, OracleType oracleType);

 
 
שני קריאות לפונקצייה
 

OracleParameter param = new OracleParameter("name", 0);

int num = 0;

OracleParameter param1 = new OracleParameter("name", num);

 
ואיך זה נראה כשפותחים Reflector
 

OracleParameter param = new OracleParameter("name", (OracleType)0);

int num = 0;

OracleParameter param1 = new OracleParameter("name", num);

 
 
כמו שאפשר לראות שליחה של הערך 0 לא מתרגמת ל - object (כמו כל שאר המספרים) אלא למופע של OracleType - מה שמוביל לשגיאה מכיוון שהמספר 0 לא קיים ב - enum.
 
למעשה גם אם נכתוב ככה:

object obj = 0;

OracleParameter param = new OracleParameter("name", obj);

 
 
ניסיתי לחקור קצת מדוע הערך 0 לא מתורגם ל object אלא ל - Enum ולא ממש הצלחתי להבין, אשמח לשמוע את הסיבה ממכם.
 
עריכה
תודה לסשה שהפנה אותי לדוקומנטציה של #C ששם כתוב
C# Language Specification, 6.1.3, Implicit Enumeration Conversions:
An implicit enumeration conversion permits the decimal-integer-literal 0 to be converted to any enum-type and to any nullable-type whose underlying type is an enum-type.
 
ותודה ללירן שהפנה אותי ל - MSDN ששם מתואר הבעייה והפיתרון.
 
פורסם: Jan 14 2010, 10:06 PM by Shlomo | with no comments
תגים:, , ,
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 1 and 5 and type the answer here:


Enter the numbers above: