如何在任何函数之外使用VAR

时间:2016-04-23 14:03:57

标签: c# var tweetinvi

我正在尝试学习tweetinvi凭据,因此我有以下用户界面

enter image description here

以及这两种方法,initAuthenticationstartAuthentication

    private void initAuthentication()
    {            
            var appCredentials = new TwitterCredentials(consumerKey, consumerSecret);
            var authenticationContext = AuthFlow.InitAuthentication(appCredentials);
            Process.Start(authenticationContext.AuthorizationURL);

            //i am commenting the following code

            //var userCredentials = AuthFlow.CreateCredentialsFromVerifierCode(textBox1.Text, authenticationContext);
            //Auth.SetCredentials(userCredentials);

            //so the user have some time to copy the pinCode
            //paste them into available textbox
            // and continue executing startAuthentication() by clicking authenticate button.
    }

private void startAuthentication (string pinCode)
{
    //if we split like this, the authenticationContext is error, because it doesn't exist in current context

    var userCredentials = AuthFlow.CreateCredentialsFromVerifierCode(pinCode, authenticationContext);
    Auth.SetCredentials(userCredentials);
}

如果我们将两个部分都加入到一个函数中,则用户没有时间将密码粘贴到文本框中。

但是,如果我们将这两个部分拆分为不同的功能,那么用户有时间将密码粘贴到文本框中,但似乎authenticationContext出错,因为it doesn't exist in current context

有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

我不确定这个API应该如何工作,但是在方法中创建的变量的范围仅存在于该方法中。

您有两种选择:

  1. 创建AuthFlow.InitAuthentication(appCredentials);返回的任何类型的类变量,在第一个方法中设置它,然后您可以从第二个方法访问它。

  2. AuthFlow.InitAuthentication(appCredentials);的返回类型的参数添加到第二个方法,然后在调用第二个方法时传入上下文。

  3. 修改

    考虑到这一点,上下文通常是你需要传递的东西,所以选项1可能会更好。

    修改2

    我查了一下,InitAuthentication返回IAuthenticationContext。所以在你的方法之外创建一个类变量,比如

    IAuthenticationContext _authContext;
    

    然后在方法一中

    _authContext = AuthFlow.InitAuthentication(appCredentials);
    

    然后在方法二中

    var userCredentials = AuthFlow.CreateCredentialsFromVerifierCode(pinCode, _authContext);
    

    还回答有关var的问题...... var基本上是创建变量的简写,而不必每次都输入类型。然而,对var的一个警告是,它所使用的变量必须被赋予一些值,否则var无法推断底层类型,你将得到编译器错误。

    例如

    var myVariable1;
    

    var myVariable1 = null;
    

    将抛出编译时错误,因为编译器无法推断myVariable1的类型应该是什么。

    正确的语法是

    var myVariable1 = 4;
    

    或者

    var myVariable1 = "hello world";
    

    或者

    var myVariable1 = SomeMethodThatReturnsSomething();
    

答案 1 :(得分:0)

创建类字段而不是局部变量

class ClassName
{
    AuthenticationContext authenticationContext;

    private void initAuth()
    {
        // set authenticationContext
        authenticationContext = AuthFlow.InitAuthentication(appCredentials);
    }

    private void startAuth(string pin)
    {
        // use authenticationContext
    }
}