首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不适用于集合的元素?

为什么不适用于集合的元素?
EN

Stack Overflow用户
提问于 2017-04-23 21:03:01
回答 2查看 3K关注 0票数 23

下面的引用返回示例来自在C# 7.0中有什么新的

代码语言:javascript
运行
复制
public ref int Find(int number, int[] numbers)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] == number)
        {
            return ref numbers[i]; // return the storage location, not the value
        }
    }
    throw new IndexOutOfRangeException($"{nameof(number)} not found");
}

它编译时没有任何问题(正如您所预期的,因为它是从Microsoft博客复制的)。

我写了这封信:

代码语言:javascript
运行
复制
private static ref int GetReference(string searchTerm)
{
    var passwords = new Dictionary<string, int>
    {
        {"password", 1},
        {"123456", 2},
        {"12345678", 3},
        {"1234", 4},
        {"qwerty", 5},
        {"12345", 6},
        {"dragon", 7}
    };

    return ref passwords[searchTerm];
}

但是,这个程序没有编译;它给出了以下错误:

CS8156表达式不能在此上下文中使用,因为它可能不会通过引用返回。

为什么从数组返回而从集合返回却不工作?

EN

Stack Overflow用户

发布于 2017-04-23 21:33:20

在C#中,ref致力于:

  • 变量(局部变量或参数)
  • 字段
  • 阵列位置

ref不适用于:

  • 属性
  • 事件
  • 在C# 7的情况下,局部变量由ref返回

注意,对于字段和数组位置,访问数组的方式并不重要。也就是说,return ref numbers[i];不保留numbers,而是保存它指向的数组。与return ref numbers;不同的是,只有当numbers是字段时才能工作。

但是,在ref的索引属性上使用Dictionary<,>,它开始时并不是ref支持的表达式(也就是说,即使在C# 7之前也不能将ref passwords[searchTerm]作为参数传递),更不用说由ref返回了。

票数 21
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43576471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档