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 ששם מתואר הבעייה והפיתרון.