参考或价值类型?

时间:2017-08-10 10:22:50

标签: c# arrays reference value-type

我开始阅读有关参考和值类型的更多信息。我对这种情况有疑问:

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是什么呢?当我拆分数值类型的数组部分。这些是什么?

2 个答案:

答案 0 :(得分:2)

如果我理解正确的话,你会问当你操纵值类型时会发生什么,例如int

从技术上讲,你不能操纵价值类型。相反,每次执行操作时都会创建一个新值。

因此,在您的示例中,v仍然是值类型。但是,您可以强制编译器通过装箱/取消装箱将值类型转换为引用类型,反之亦然:

Object obj = (object) 10;
int i = (int) obj;

详细了解此主题here

答案 1 :(得分:1)

是的,arrays始终是reference types。但是,array只是项目的集合。收集的项目不会因为它们在一个集合中而改变它们的类型。 int几乎总是int,因此value typeint,无论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
    });

表示结果中的每个元素。