我知道有很多关于此错误的问题,但我没有找到任何解决此问题的人:
我有一个readonly属性,在一个方法里面我想用它(不分配它)所以错误的解决方案不是典型的:
var a = myOjb.MyProp;
DoSomething(a);
myObj.MyProp = a;
因为该代码无法编译,例如MyProp是只读的,无法分配。
基本上我想要的是在这样的方法中编写Response of Response属性:
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);
}
我该怎么做?
谢谢,迭戈
注意:代码只是一个例子。
答案 0 :(得分:4)
您应该将参数更改为普通参数。
您(可能)无论如何都不需要ref
参数。
有关按引用传递的详细信息,请参阅here。
如果确实需要ref
参数,可以将对象放在本地可写变量中,并将该变量作为ref
传递。
但是,这将破坏参数的整个目的。
答案 1 :(得分:2)
您不需要将其作为参考参数来执行您想要的操作。只需传入流并写入即可。
它抱怨是因为您正在使用ref参数并传递Response.OutputStream
,这意味着当您的方法返回时,可能会尝试将Response.OutputStream
设置为来自的新流在方法内,这是不允许的。这并不意味着将做,但它可能会。
例如,这在您的示例中有效(并且是编译器抱怨的原因):
public void SomeMethod(ref Stream responseStream)
{
responseStream = new Stream();
responseStream.Write(new byte[] { 1, 2, 5, 3 }, 0, 4);
}
并尝试将新的流对象分配给Response.OutputStream
,这是不允许的。