Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ref或out参数必须是可赋值变量_C#_Proxy_Reverse - Fatal编程技术网

C# ref或out参数必须是可赋值变量

C# ref或out参数必须是可赋值变量,c#,proxy,reverse,C#,Proxy,Reverse,我正在编写一个可以进行反向代理连接的应用程序,但我有一个问题! 错误在这里:newform1.ProxyConfig() 当我尝试运行它时,我得到一个错误:ref或out参数必须是可赋值变量 您不能像现在这样创建一个变量并同时将其作为引用传递。试试这个: var config = new Form1.ProxyConfig() { pclient_port = form2.ClientPort, pp_start = form2.LocalStartPort, pp_en

我正在编写一个可以进行反向代理连接的应用程序,但我有一个问题! 错误在这里:
newform1.ProxyConfig()

当我尝试运行它时,我得到一个错误:ref或out参数必须是可赋值变量


您不能像现在这样创建一个变量并同时将其作为引用传递。试试这个:

var config = new Form1.ProxyConfig()
{
    pclient_port = form2.ClientPort,
    pp_start = form2.LocalStartPort,
    pp_end = form2.LocalEndPort
};

int num1 = Form1.ProxyListenerStart( ref config, ref this._PN );
原因是它真的没有任何意义,考虑下面的场景:

if( int.TryParse( "123", out new int() ) )
{
    // there's no way for us to actually use the value TryParse stored
    // into the out parameter, since it doesn't have a name
}

这是一个非常强烈的指示,表明该方法首先不应该通过引用传递参数,因为调用方不希望变量发生变异(因为没有变量)。@Servy no,这根本不是一个指示。如果调用方没有ref参数,那么您将得到一个非常不同类型的错误消息。这是一个完全不同的问题:表达式不能指定给。。。正如错误消息非常明确地说的那样。@JimBalter我不是说调用者应该省略
ref
关键字,然后它就会工作,我是说修复方法是更改方法,使其不再通过引用传递参数,而不是将其改为传入变量而不是值。这不仅仅是关于修复编译器错误,而是实际上编写了一个好的解决方案。我上面的陈述是正确的:错误并不是不应该通过引用传递参数的强烈指示——这两个问题是完全正交的。调用方可能需要更新传递给它的ProxyConfig——从上面的代码中无法知道这一点。很可能OP没有写,也无法控制ProxyListenerStart。我觉得这听起来像是32/64位不匹配。您正在加载一些非.net dll吗?感谢您的更正,现在出现另一个错误“试图加载格式不正确的程序。(HRESULT异常:0x8007000B)”是的,我知道它是proxlib.dll32位dll?您的项目是否设置为“任意CPU”,并且您是否使用64位操作系统?如果是这样,试着强制它是32位的。这是真的,它是32位的DLL文件,我使用64位,我会试试的,谢谢♥
if( int.TryParse( "123", out new int() ) )
{
    // there's no way for us to actually use the value TryParse stored
    // into the out parameter, since it doesn't have a name
}