Quelqu'un peut-il préciser le C# is
mot-clé s'il vous plaît. En particulier ces 2 questions:
Q1) ligne 5; Pourquoi ce retour vrai?
Q2), ligne 7; Pourquoi pas un casting d'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 description ne permet pas de clarifier la situation. Il déclare qu' is
retournera true si l'une de ces conditions sont remplies. (http://msdn.microsoft.com/en-us/library/scekt9xw(SV.71).aspx>MDSN l'Article)
l'expression n'est pas nulle. l'expression peut être converti en type.
Je ne crois pas que vous pouvez faire un valide en fonte de type int[] dans uint[]. Parce que:
A) Ce code ne compile pas:
int[] signed = new int[] { -100 };
uint[] unsigned = (uint[])signed;
B) de Faire la distribution dans le débogueur donne une erreur:
(uint[])signed
"Cannot convert type 'int[]' to 'uint[]'"
Bien sûr, si la ligne 3 a été int[] à la place de l'objet, alors il ne serait jamais compiler. Ce qui m'amène à une dernière question par rapport à T2.
Q3) Pourquoi est-ce que C# élever un cast/erreur de conversion dans le débogueur et le compilateur, mais pas au moment de l'exécution?