这导致了一个问题,Array和object []之间有什么区别,如果有的话?
我知道Array可以用于静态方法,而T []不能但是实例有区别吗?它们似乎具有相同的实例方法/属性.
如果没有区别,为什么Enum.GetValues()返回Array而不是object []?
解决方法
I was about to use
Enum.GetValues()
as normal,and started wondering why it returns aSystem.Array
instead ofobject[]
.
因为object []会包含所有值.我们想要的是值本身的数组,而不是它们的盒装版本.
在泛仿制药C#中一般表示一般的唯一方法是Array.请记住,该API是CLR的第一个版本,缺少泛型.
在具有泛型的世界中,存在许多更好的可能设计.
坦率地说,在没有仿制药的世界中有更好的设计.立即想到的两个是:(1)这可能是Type上的实例方法,(2)C#编译器可以在每个枚举类型上生成公共静态MyEnum [] GetValues()方法.
Is it something to do with the ComVisible attribute?
据我所知.
What is the difference between
Array
andobject[]
,if any?
我不知道如何回答“有什么不同”的问题.如果我问你“长颈鹿和哺乳动物有什么区别?”你会怎么回答呢?这是一个奇怪的问题.
数组是对象的基类[]是我能告诉你的最好的.
I know
Array
can be used for static methods whilstT[]
cannot but is there a difference for instances?
我也不明白这个问题.你能举一个“你可以用于静态方法”的例子吗?
也许你的意思是奇怪的是,通常你可以从派生类型访问类型的静态成员,但你不能使用数组类型?也就是说,你可以说:
class B { public static void M() {} } class D : B {} ... B.M(); D.M(); // Same thing
这有效:
Array.Sort(whatever);
但这不起作用:
int[].Sort(whatever);
这是C#处理成员访问操作符的一个奇怪之处,但是如果你输入int []那就没什么好处的,这很奇怪.排序()赔率非常好,你做错了.
无论哪种方式,我都不知道它与你的问题有什么关系.你能澄清一下这个问题吗?
If there is no difference,why does Enum.GetValues() return Array instead of object[]?
这个问题是不连贯的.如果你告诉我“白宫”和“宾夕法尼亚大道1600号”是同一个地址,那么我说“好吧,如果没有区别,那么为什么特朗普总统住在白宫而不是1600宾夕法尼亚大道?”你怎么回答我的疯狂问题?如果没有区别那么没有区别,那为什么重要呢?
在这种情况下,问题是基于错误的前提,因为object []和Array是不同的.但目前的问题无法回答.