我开始阅读有关参考和值类型的更多信息。我对这种情况有疑问:
int[] array = { 1, 3, 5, 7, 9 };
var result = from element in array
let v = element * 100
where v >= 500
select v;
foreach (var element in result)
Console.WriteLine(element);
每个人都知道数组是一个引用类型,但是我的let是什么呢?当我拆分数值类型的数组部分。这些是什么?
答案 0 :(得分:2)
如果我理解正确的话,你会问当你操纵值类型时会发生什么,例如int
。
从技术上讲,你不能操纵价值类型。相反,每次执行操作时都会创建一个新值。
因此,在您的示例中,v
仍然是值类型。但是,您可以强制编译器通过装箱/取消装箱将值类型转换为引用类型,反之亦然:
Object obj = (object) 10;
int i = (int) obj;
详细了解此主题here。
答案 1 :(得分:1)
是的,arrays
始终是reference types
。但是,array
只是项目的集合。收集的项目不会因为它们在一个集合中而改变它们的类型。 int
几乎总是int
,因此value type
是int
,无论array
中是Console.WriteLine(element.GetType());
还是System.Int32
。
如果您将代码更改为
interface CustomDrawerListener extends DrawerLayout.DrawerListener{
@Override
void onDrawerSlide(View drawerView, float slideOffset);
@Override
default public void onDrawerOpened(View drawerView) {
}
@Override
default public void onDrawerClosed(View drawerView) {
}
@Override
default public void onDrawerStateChanged(int newState) {
}
}
你会看到它会输出
d1.addDrawerListener((CustomDrawerListener)(view,offset)->{
// My action goes here
});
表示结果中的每个元素。