0

我正在尝试学习tweetinvi凭证,所以我有以下 UI

在此处输入图像描述

和这两种方法,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);
}

如果我们将这两个部分加入一个功能,用户就没有时间将密码复制粘贴到文本框中。

但是,如果我们将这两个部分拆分为不同的功能,则用户需要一些时间将 pin 码复制粘贴到文本框中,但似乎authenticationContext出错了,因为it doesn't exist in current context

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

4

2 回答 2

3

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

你有两个选择:

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

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

编辑

只是想多了一点,上下文通常是你需要传递的东西,所以选项 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;

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

正确的语法是

var myVariable1 = 4;

或者

var myVariable1 = "hello world";

或者

var myVariable1 = SomeMethodThatReturnsSomething();
于 2016-04-23T14:12:10.150 回答
0

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

class ClassName
{
    AuthenticationContext authenticationContext;

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

    private void startAuth(string pin)
    {
        // use authenticationContext
    }
}
于 2016-04-23T14:14:55.707 回答