为什么赋值的左侧必须是变量属性或索引器?

时间:2017-08-15 10:35:08

标签: c# .net

private ArrayList arr = new ArrayList();

private ArrayList Test()
{
    return arr;
}
private void WhyMustVariable()
{
    Test() = new ArrayList();   // error: left-hand side of an assignment must be a variable property or indexer
}

为什么我不能这样做Test()= ...; 感谢。

2 个答案:

答案 0 :(得分:2)

在编写test().xyz = xxx时,您首先执行test,它会错误地返回ArrayList的某个实例(顺便说一下,您现在应该考虑使用List<T>,这是强类型的从而保护您不会将列表中的每个元素转换为其实际类型)。现在,您可以使用该实例执行您想要的操作,例如调用另一个方法或设置其任何属性。这相当于这样做:

var val = test();
val.MyMember = 3;

然而,当使用test() = ...时,您正在为方法的返回值分配一个新值,这显然没有意义。

我想你想要的是为你的方法提供一些参数。为此,您的方法也应该期望一个:

ArrayList test(int myInt)
{
    // do something with myInt
}

并称之为:

var list = test(3);

答案 1 :(得分:1)

赋值必须有一个存储分配值的位置,这必须是变量或属性(索引器是一种特殊的属性)。

属性赋值会以静默方式转换为方法调用。

Test() = ...

其中Test()返回的内容不能用作赋值的目标,因为返回的是值,而不是变量(也不是属性)。