相关疑难解决方法(0)

为什么在C#中"int []是uint [] == true"

有人可以澄清一下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# arrays unsigned casting

34
推荐指数
1
解决办法
4334
查看次数

有没有办法从myFunc(new int [] {1,2,3}}中删除myFunc(1,2,3)?

向所有人提出问题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]}

这可以做到,还是我问不可能?

c# params

9
推荐指数
3
解决办法
719
查看次数

标签 统计

c# ×2

arrays ×1

casting ×1

params ×1

unsigned ×1