属性、索引器或动态成员访问不能作为具有只读属性的out或ref参数传递
本文关键字:只读属性 ref out 参数传递 不能 索引 动态 成员 属性 访问 | 更新日期: 2023-09-27 18:00:39
我知道这个错误有很多问题,但我还没有找到解决这个问题的人:
我有一个只读属性,在一个方法中我想使用它(而不是分配它),所以错误的解决方案不能是典型的:
var a = myOjb.MyProp;
DoSomething(a);
myObj.MyProp = a;
因为这些代码不会编译,比如MyProp是只读的,不能赋值。
基本上,我想要的是用这样的方法编写响应流属性:
public ActionResult Guardar()
{
try
{
SomeMethod(ref Response.OutputStream);
Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", name));
Response.ContentType = "Application/pdf";
return null;
}
catch { }
}
public void SomeMethod(ref Stream responseStream)
{
responseStream.Write(new byte[] { 1, 2, 5, 3 }, 0, 4);
}
我该怎么做?
谢谢,Diego
注意:代码只是一个示例。
您应该将参数更改为普通参数。
无论如何,您(可能)都不需要ref
参数。
有关通过引用传递的更多信息,请参阅此处。
如果确实需要一个ref
参数,可以将对象放在本地可写变量中,并将该变量作为ref
传递
但是,这将破坏参数的全部目的。
您不需要将其作为引用参数来执行您想要的操作。只需传入流并写入即可。
它会抱怨,因为您正在使用ref参数并传递Response.OutputStream
,这意味着当您的方法返回它时,可能会尝试将Response.OutputStream
设置为方法内的新流,这是不允许的。这并不意味着会,但它可能会。
例如,这在您的示例中是有效的(这也是编译器抱怨的原因):
public void SomeMethod(ref Stream responseStream)
{
responseStream = new Stream();
responseStream.Write(new byte[] { 1, 2, 5, 3 }, 0, 4);
}
并且将尝试将不被允许的新流对象分配给CCD_ 6。