0

資格情報を学習しようとしtweetinviているので、次の UI があります

ここに画像の説明を入力

そしてこれら2つの方法、initAuthenticationそしてstartAuthentication

    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);
}

両方の部分を 1 つの関数に結合すると、ユーザーが PIN コードをコピーしてテキスト ボックスに貼り付ける時間がなくなります。

ただし、両方の部分を別の機能に分割すると、ユーザーが PIN コードをテキスト ボックスにコピー ペーストする時間がありますが、authenticationContextエラーが発生したようです。it doesn't exist in current context

これを解決する方法はありますか?

4

2 に答える 2

3

この API がどのように機能するのかはわかりませんが、メソッド内で作成された変数のスコープはそのメソッド内にのみ存在します。

次の 2 つのオプションがあります。

  1. によって返される型のクラス変数を作成 AuthFlow.InitAuthentication(appCredentials);し、最初のメソッドで設定すると、2 番目のメソッドからアクセスできます。

  2. 戻り値の型が何であれ、2 番目のメソッドにパラメーターを追加AuthFlow.InitAuthentication(appCredentials);し、2 番目のメソッドを呼び出すときにコンテキストを渡します。

編集

これについてもう少し考えてみてください。通常、コンテキストはかなりの量を渡す必要があるため、オプション 1 の方が適している可能性があります。

編集 2

調べてInitAuthentication返しますIAuthenticationContext。したがって、このようにメソッドの外でクラス変数を作成します

IAuthenticationContext _authContext;

次に、方法1で

_authContext = AuthFlow.InitAuthentication(appCredentials);

次に、方法2で

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

また、... var についての質問に答えるにvarは、基本的に、毎回型を入力することなく変数を作成するための省略形です。ただし、1 つの注意点varは、使用されている変数に値を割り当てる必要があることです。そうしないと、var は基になる型を推測する方法がなく、コンパイラ エラーが発生します。

例えば

var myVariable1;

また

var myVariable1 = null;

myVariable1コンパイラは Type がどうあるべきかを推測する方法がないため、コンパイル時エラーがスローされます。

正しい構文は次のとおりです。

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 に答える