2017-06-21 5 views
0

私は次のPaymentsコードを持っています。タイプのvarを宣言します。ストライプチャージをtry tryの外に作成します。

var service = new StripeChargeService(newgenSecretKey); 
try 
{ 
    var result = service.Create(newCharge); 

    if (result.Paid) 
    { 
     lab.Text = "It worked"; 
     CartOrders.UpdateTransactionID(result.Id, OrderID, "Express Checkout"); 

     Response.Redirect("PgeCustSuccess.aspx?OrderID=" + OrderID); 

    } 
} 
catch (StripeException stripeException) 
{ 
    Debug.WriteLine(stripeException.Message); 
    stripe.Text = stripeException.Message; 
    //CartOrders.UpdateTransactionID(result.FailureMessage, OrderID, "Express Checkout");  
} 

私は.Iがスローされた場合にはストライプのエラーをキャッチしようと、私のデータベースにそれをログに記録していますcatchブロック(result.FailureMessage)でコメントアウト値を記録したいと思います。私が直面している問題は、結果を得ることができないということです.FailureMessageはcatchブロックで動作します。グローバル変数は宣言できず、ローカルでのみ使用する必要があることを理解しています。

私が試したことはいくつかあります。

は、任意のアイデアをtryブロックの外に結果を宣言されていますが、varはタイプで初期化されなければならないので、成功しなかった、それはタイプのストライプの

var service = new StripeChargeService(newgenSecretKey); 
var result = new { }; 
try 
{ 
    //did not work 
    result = service.Create(newCharge); 

    if (result.Paid) 
    { 

のですか?

+1

変数を 'try'ブロックの外側で使用する必要がある場合、' try'ブロックの外側で宣言する必要がありますが、変数と同様に、その変数を宣言する必要があります。 'try'ブロックの中でそれを初期化しなければならないという事実は、あなたが宣言した場所とは無関係です。彼らは2つの異なるものです。 'service.Create'の戻り値の型が' Stripe'ならば、 'result'を' Stripe result; 'と宣言した型です。 'catch'ブロックで' result'が 'null'であるかどうかをテストする必要があります。 'null 'として初期化しなければならないかもしれません。 – jmcilhinney

+0

'StripeChargeService'はタイプですが、新しいチャージの作成を呼び出します。だから私はそれを宣言することができません –

+0

それは電荷オブジェクトを返します。しかし、私はどのようにそれを型として指定しますか? –

答えて

0

あなたは行うことができます:

var service = new StripeChargeService(newgenSecretKey); 
Stripe result; 
try 
{ 
    result = service.Create(newCharge); 
    if (result.Paid) 
    { 
+0

この回答は役に立ちません。ストライプは名前空間であり、型ではありません。 –

+0

service.Create Typeは何を返しますか?オブジェクトの型を返す必要があります。名前空間と型が同じ場合は、型の名前空間エイリアスを使用してみてください。最悪の場合(私はこれを避けるだろうが)、動的キーワード –

+0

を使用できるようになりました。ストライプチャージオブジェクトを返します。私がしたのは、var result =(Stripe.StripeCharge)nullと宣言していただけです。 –

0

試みのうち、結果を移動してみてください、または:結果が取り込まれることはありません場合は、あなたのresult.FailureMessageが例外をスローすることが

var service = new StripeChargeService(newgenSecretKey); 
var result; 

try 
{ 
result = service.Create(newCharge); 

if (result.Paid) 
{ 
    lab.Text = "It worked"; 
    CartOrders.UpdateTransactionID(result.Id, OrderID, "Express Checkout"); 

    Response.Redirect("PgeCustSuccess.aspx?OrderID=" + OrderID); 

    } 
} 
catch (StripeException stripeException) 
{ 
    Debug.WriteLine(stripeException.Message); 
    stripe.Text = stripeException.Message; 
    //CartOrders.UpdateTransactionID(result.FailureMessage, OrderID, "Express Checkout");  
} 

注意を。 if文やtry-catchを使用してこれを防ぐことができます。

+0

同じように私は働くと思った。残念なことにC#では、varは宣言されたときに値で初期化されます。それを動的に割り当てようとするとコンパイルに失敗する –

+0

これをnilに初期化できませんでしたか? – mikep

+0

暗黙的に型指定された変数にnullを割り当てることはできません –

関連する問題