KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Can somebody clarify the C# is keyword please. In particular these 2 questions: Q1) line 5; Why does this return true? Q2) line 7; Why no cast exception? public void Test() { object intArray = new int[] { -100, -200 }; if (intArray is uint[]) //why does this return true? { uint[] uintArray = (uint[])intArray; //why no class cast exception? for (int x = 0; x < uintArray.Length; x++) { Console.Out.WriteLine(uintArray[x]); } } } MSDN's description does not clarify the situation. It states that is will return true if either of these conditions are met. (http://msdn.microsoft.com/en-us/library/scekt9xw(VS.71).aspx>MDSN Article) expression is not null. expression can be cast to type. I don't believe that you can do a valid cast of int[] into uint[]. Because: A) This code does not compile: int[] signed = new int[] { -100 }; uint[] unsigned = (uint[])signed; B) Doing the cast in the debugger gives an error: (uint[])signed "Cannot convert type 'int[]' to 'uint[]'" Sure enough, if line 3 was int[] instead of object then it would never compile. Which brings me to a final question related to Q2. Q3) Why does C# raise a cast/conversion error in the debugger and compiler but not at runtime?
Tags (comma-separated)
Save Edits
Cancel