我正在学习c#并试图理解它的"类型导向"方面.
所以有一天我需要从方法接收System.Array对象.然后我尝试使用它的单个对象,所以我试图用索引来解决它.编译器不会让我,说System.Array对象不支持索引.
但是不是Array是所有数组的基类(msdn上的System.Array)?int []如何支持索引,而Array []不支持?
这里有一些代码来演示这个问题:
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
int t;
Array sysArray;
Console.WriteLine("{0}", intArray.GetType().ToString()); // output: System.Int32[]
sysArray = Array.CreateInstance(typeof(int), 10);
Console.WriteLine("{0}", sysArray.GetType().ToString()); // output: System.Int32[]
sysArray = intArray; //compiles ok
//t = sysArray[4]; This line produces error Error 2 Cannot apply indexing with [] to an
// expression of type 'System.Array'
//t = intArray[4]; This line compiles ok
Run Code Online (Sandbox Code Playgroud)
所以我们这里有两个对象,它们看起来是同一类型的.但是一个是实现索引而另一个不是,它怎么可能?
对回复的引用
看完你的评论后,我觉得我对事物有所了解.int []是和对象数组.每个对象都是int32类型的结构.Array []是一个对象数组.每个对象都是Array类.含义:数组数组.因为我可以在以下代码中显示:
Array[] sysArrayOfArray = new Array[SIZE_OF_THE_MOTHER_ARRAY];
sysArrayOfArray[0] = Array.CreateInstance(typeof(int),SIZE_OF_FIRST_CHILD_ARRAY);
sysArrayOfArray[1] = Array.CreateInstance(typeof(int),SIZE_OF_FIRST_SECOND_ARRAY);
Run Code Online (Sandbox Code Playgroud)
等等...所以我理解为什么我试图访问sysArray元素的方式是错误的.intArray …
我想对没有参数的函数使用类型提示
from typing import Callable
def no_parameters_returns_int() -> int:
return 7
def get_int_returns_int(a: int) -> int:
return a
def call_function(next_method: Callable[[], int]):
print(next_method())
call_function(no_parameters_returns_int) # no indication of error from IDE expected
call_function(get_int_returns_int) # expected an indication of error from IDE
Run Code Online (Sandbox Code Playgroud)
我希望 PyCharm 在我传递带有参数的函数时标记该行。也尝试Callabale[[None], int]过 和Callabale[[...], int]。然而,第一个暗示传递的函数接收None类型参数,第二个暗示传递的函数接收至少一个参数。
是否可以暗示传递的函数不接收任何参数?