有人可以澄清一下C#is关键字.特别是这两个问题:
Q1)第5行; 为什么这会回归真实?
Q2)第7行; 为什么没有施放异常?
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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
MSDN的描述并未澄清情况.它声明is如果满足其中任何一个条件,它将返回true.(http://msdn.microsoft.com/en-us/library/scekt9xw(VS.71).aspx>MDSN文章)
expression is not null. expression can be cast to type.
我不相信你可以对int []进行有效的转换为uint [].因为:
A)此代码无法编译:
int[] signed = new int[] { -100 };
uint[] unsigned …Run Code Online (Sandbox Code Playgroud) 向所有人提出问题C#向导.我有一个方法,称之为myFunc,它需要可变长度/类型参数列表.myFunc本身的参数签名是myFunc(params object[] args),我在列表上使用反射(例如,想想这有点像printf).
我想要myFunc(1, 2, 3)区别对待myFunc(new int[] { 1, 2, 3 }).也就是说,在myFunc的主体内,我想枚举我的参数的类型,并希望最终得到{int,int,int}而不是int [].现在我得到后者:实际上,我无法区分这两种情况,它们都以int []的形式出现.
我希望前者显示为obs [].长度= 3,obs [0] = 1等.
而且我曾预计后者会显示为obs [].长度= 1,其中obs [0] = {int [3]}
这可以做到,还是我问不可能?