当我通过引用传递索引器作为参数时,代码中存在编译时错误。
- 分配内存对索引器封装的字段的机制是什么(当我们将任何值设置为类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参数传递。
答案 0 :(得分:5)
为什么不能使用ref或out关键字传递索引器?
因为索引器实际上是方法。它不一定是变量,内存中的地址可以传递“引用”。
执行此操作的方法是使用临时局部变量:
Y
但是我会注意到你的方法没有修改引用,因此根本不需要使它成为result[2] = "44000";//C#
string temp = result[2];
BestLanguage(ref temp);
result[2] = temp;
参数!
答案 1 :(得分:1)
您的索引器当前的实现方式,无论您使用什么结果[x],都会覆盖LanguageUser
。