【问题标题】:How can I use variable from a private method in another private method ? C# ASPX如何在另一个私有方法中使用私有方法中的变量? C# ASPX
【发布时间】:2020-06-09 00:15:41
【问题描述】:

所以我有一个带有私有方法的类,我想将一个变量从一种方法使用到另一种方法。 我不知道如何以及从哪里开始。 我应该使用 get 和 set 还是创建一个完整的公共方法,我不知道。

这是第一种方法,我想使用变量“prixTotal”

private string RecupPrixTransaction(XmlDocument doc)
{
    XmlNodeList nl = null;
    XmlNode nodeDevise = null;
    string data = string.Empty;
    string devise = string.Empty;
    decimal acompteTotal = 0;
    decimal prixTotal = 0;

    if (doc == null)
        return (data);
    nodeDevise = doc.SelectSingleNode("/Caddie/GroupesProduits/GroupeProduit[@IdGroupe='" + this.guid + "']/Devise");
    if (nodeDevise == null)
        return (data);
    devise = nodeDevise.InnerText;
    nl = doc.SelectNodes("/Caddie/GroupesProduits/GroupeProduit[@IdGroupe='" + this.guid + "']/Produits/Produit");
    if (nl == null)
        return (data);
    try
    {
        foreach (XmlNode nd in nl)
        {
            prixTotal += decimal.Parse(nd["PrixTotal"].InnerText, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
            acompteTotal += decimal.Parse(nd["AcompteTotal"].InnerText, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
        }
        data += "Prix total de la transaction: <strong>" + prixTotal + "</strong> " + devise + "<br />";
        data += "Acompte total payé: <strong>" + acompteTotal + "</strong> " + devise + "<br />";
    }
    catch (Exception)
    {
        data += "Prix/acompte invalide.<br />";
    }
    return (data);
}

这是我想使用变量“prixTotal”的方法

private void AffTransa(string id, SqlConnection sqlConnect)
{
    SqlDataReader reader = null;

    decimal recapPrixTotal = RecupPrixTransaction(prixTotal);


    reader = Database.ExecuteReader(EnumConstant.SqlLecture + "SELECT * FROM transactionfin WHERE IdTransactionFin='" + id + "'", sqlConnect);
    if (reader.Read())
    {

        this.lTransa.Text = "<h2>Détail de la transaction " + id + "</h2><br />";
        this.lTransa.Text += "Date de la transaction: <b>" + reader["TransactionFinDate"] + "</b><br />";
        this.date = reader["TransactionFinDate"].ToString();
        this.lTransa.Text += "Solution de paiement: <b>" + MyRegex.ReplacePaiementSol(reader["PaiementSolution_IdPaiementSolution"].ToString()) + "</b><br />";
        this.lTransa.Text += "{[{-}]}Mode: <b>" + MyRegex.ReplaceMode(reader["TransactionFinMode"].ToString()) + "</b><br />";
        this.lTransa.Text += "Etat: <b>" + MyRegex.ReplaceEtat(reader["TransactionFinEtat"].ToString()) + "</b><br />";
        if (reader["TransactionFinUrlRetour"].ToString() != "&nbsp;")
            this.lTransa.Text += "Url de retour: <a href=\"" + reader["TransactionFinUrlRetour"].ToString() + "\">" + MyRegex.ReplaceUrlRetour(reader["TransactionFinUrlRetour"].ToString()) + "</a><br />";
        this.lTransa.Text += "<br /><br />Id Transaction: <b>" + reader["TransactionFinIdTransaction"] + "</b><br />";
        this.lTransa.Text += "Guid: <b>" + reader["TransactionFinGuidGroupe"].ToString() + "</b><br />";
        this.guid = reader["TransactionFinGuidGroupe"].ToString();
        this.lTransa.Text += "Id action contact: <b>" + reader["ActionContact_IdActionContact"] + "</b><br />";
        this.lTransa.Text += "Id vente entete: <b>" + reader["VenteEntete_IdVenteEntete"] + "</b><br />";
        if (reader["TransactionFinDetail"] != null && reader["TransactionFinDetail"].ToString() != string.Empty)
        {
            this.tbTransa.Visible = true;
            this.tbTransa.Text = XmlParsing.IndentXml(reader["TransactionFinDetail"].ToString()); 
            this.lRecap.Text += "Recapitulatif de la Transaction : " ;
            this.recapTransa.Visible = true;
            this.recapTransa.Text += "#Fournisseur" + "\n" +
                                     "#Internaute" + "\n" +
                                     "#Montants" + "\n" + recapPrixTotal +
                                     "#Produits" + "\n" +
                                     "#Suppléments" + "\n";

        }

    }
    reader.Close();
}

我尝试调用这样的方法,但这不起作用

decimal recapPrixTotal = RecupPrixTransaction(prixTotal);

编辑:

在类的顶部,我将变量“prixTotal”像这样放置

  public partial class SeeDetail : System.Web.UI.Page
{

    private decimal prixTotal = 0; 
    ...
}

我已经从 RecupPrixTransaction 方法中删除了它 Andin AffTransa 方法,我这样称呼它

decimal recapPrixTotal = prixTotal;

在 RecupPrixTransaction 方法中,“prixTotal”的结果是好的 但在 AffTransa 方法中,数字始终为 0

感谢您的帮助;)

【问题讨论】:

  • 什么是prixTotal?是XmlDocument ,因为这是它所期待的
  • 这两个方法是同一个类吗?
  • prixTotal 来自 XML 是的
  • 是的,这两个方法都在同一个类中
  • 当你调用这个方法时说。

标签: c# asp.net .net methods private


【解决方案1】:

以这种方式,这是不可能的。现在prixTotal 在方法范围内,无法从外部访问。但是您可以将decimal prixTotal = 0; 移动到类范围,然后可以从这两种方法访问此变量。

Class A
{
    private decimal prixTotal = 0;

    private void Method A ....
}

【讨论】:

  • 我刚试了一下,最后总是返回 0。我需要从 RecupPrixTransaction 中的 prixTotal 到其他方法的值
  • 我看不到 OP 的代码在他期望返回小数时甚至会如何运行,但我们返回一个字符串 data 对我来说看起来像 html
  • @Mathias 展示了您如何调用这两种方法。在同一个类实例上?每个新实例在生命之初都有prixTotal = 0
【解决方案2】:

我尝试调用这样的方法,但这不起作用 十进制 recapPrixTotal = RecupPrixTransaction(prixTotal);

  • RecupPrixTransaction 的返回类型是String 类型
  • RecupPrixTransaction 接受的参数是XmlDocument 类型而不是decimal

解决:

  • 范围内声明private decimal prixTotal { get; set; }
  • private string RecupPrixTransaction(XmlDocument doc)
    {
    prixTotal =0;
    ...
    }
    
  • private void AffTransa(string id, SqlConnection sqlConnect)
    {
    decimal recapPrixTotal= prixTotal;
    ...
    }
    

【讨论】:

    【解决方案3】:

    我看不出有什么办法。

    你在打电话

    private string RecupPrixTransaction(XmlDocument doc)
    

    这对我来说表明该方法正在返回一个字符串并传递一个XmlDocument

    但你传递的是

    decimal recapPrixTotal = RecupPrixTransaction(prixTotal);
    

    看起来您想要一个decimal 并传递一个(至少对我们而言)名为prixTotal 的变量

    如果你希望它返回一个decimal,我建议更改方法的返回类型,假设你传递给它一个XmlDocument

    如果他们在同一个类,我不明白为什么上面的方法不会命中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2020-10-13
      • 2016-06-28
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多