【问题标题】:Declare a var of type Stripe charge create outside try catch声明一个 Stripe charge 类型的 var create outside try catch
【发布时间】:2017-11-23 19:19:27
【问题描述】:

我有以下付款代码。

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

我想在 catch 块中记录注释掉的值(result.FailureMessage)。我试图捕捉抛出的条纹错误并将其记录到我的数据库中。我面临的问题是我无法让 result.FailureMessage 在 catch 块中工作。我知道不能声明全局变量,只能在本地使用。

这是我尝试过的一些事情。

在 try 块之外声明了结果,但没有成功,因为 var 应该用一个类型初始化并且它是 stripe 类型

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

    if (result.Paid)
    {

有什么想法吗?

【问题讨论】:

  • 如果变量需要在try 块之外使用,那么它需要在try 块之外声明,但是与任何变量一样,您需要将其声明为它的类型原意是要。您必须在 try 块内对其进行初始化这一事实与您声明它的位置无关。他们是两个不同的东西。如果service.Create 的返回类型是Stripe,那么这就是您声明result variable as: Stripe 结果的类型;. You would need to test whether result` 是null,然后在catch 块中使用它。您可能还需要将其初始化为 null
  • 'StripeChargeService' 是一种类型,但它调用创建新费用。所以我无法声明它
  • 它返回一个收费对象。但是我如何将其指定为类型?
  • @jmcilhinney。弄清楚了 。你的评论真的很有帮助。您能否写一个答案,以便我将其标记为正确。我将结果变量声明为 var result = (Stripe.StripeCharge)null;它按预期工作

标签: c# asp.net stripe-payments


【解决方案1】:

你可以这样做:

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

【讨论】:

  • 这个答案没用。 Stripe 是命名空间而不是类型
  • service.Create 类型返回什么?它必须返回一个对象类型。如果命名空间和类型相同,请尝试为该类型使用命名空间别名。最坏的情况(虽然我会避免这种情况)你可以使用动态关键字
  • 现在可以工作了。它返回一个条纹电荷对象。我所做的只是将它声明为 var result = (Stripe.StripeCharge)null 。
【解决方案2】:

尝试将结果从尝试中移出,或者:

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

请注意,如果从未填充结果,您的 result.FailureMessage 可能会抛出异常;您可以使用 if 语句或 try-catch 来防止这种情况发生。

【讨论】:

  • 和我想的一样。不幸的是,在 c# 中,一个 var 在声明时应该用一个值初始化。当我尝试动态分配它时编译失败
  • 你不能把它初始化为 nil 吗?
  • 无法将 null 分配给隐式类型变量
  • 显式怎么样?结果的类型是什么?
猜你喜欢
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2023-04-05
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多