当我通过引用将索引器作为参数传递时,代码中存在编译时错误。


为什么索引器不能与ref或out关键字一起传递?



  
  为索引器封装的字段分配内存的机制是什么(当我们为Defining_Indexer类的索引器的元素设置任何值时)?
  


     using System;

    class Defining_Indexer

    {
        private string LanguageUser;
        //Declaring indexer
        public string this[int index]
        {
    get
    {
        return LanguageUser;
    }
    set
    {
        LanguageUser = value;
    }
        }
    }
    class Using_Indexer{

        //Declaring a method that will use indexer as argument
        public static string BestLanguage(ref string name)
        {


    //Here I want to show number of users of best language.
        Console.WriteLine("Number of user : ");
        //I want to modify the number of user Since parameter is initialized then best language
        //users number is decided so there is no any fake.
        string declare = name + "2000";
        Console.WriteLine(declare);
        return declare;
    }//end of BestLanguage Method
    static void Main(string[] args)
    {
        Defining_Indexer result = new Defining_Indexer();
        //Here result elememts store the number of users of a some language.
        result[0] = "2315";//C
        result[1] = "4500";//C++
        result[2] = "44000";//C#
        BestLanguage(ref result[2]);//--Here is error
        Console.Write("Number of User by Main Method :");
        Console.WriteLine(result[2]);
    }
    }


这是编译时错误


  属性或索引器可能无法作为ref或out参数传递。

最佳答案

为什么索引器不能与ref或out关键字一起传递?


因为索引器是有效的方法。它不一定是可以在其中传递“引用”的具有内存地址的变量。

这样做的方法是使用临时局部变量:

result[2] = "44000";//C#
string temp = result[2];
BestLanguage(ref temp);
result[2] = temp;


但是,我会注意到您的方法没有修改引用,因此根本不需要将其设为ref参数!

关于c# - 在C#中将索引器作为参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37822814/

10-09 03:11