Как я могу использовать переменную из частного метода в другом частном методе? C# ASPX - PullRequest
0 голосов
/ 25 февраля 2020

Итак, у меня есть класс с закрытым методом, и я хочу использовать переменную из одного метода в другой. Я не знаю как и с чего начать. Должен ли я использовать get и set или создать полный метод publi c, я не знаю.

Вот первый метод, и я хочу использовать переменную "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 И в метод AffTransa, я вызываю это так

decimal recapPrixTotal = prixTotal;

В методе RecupPrixTransaction результат "prixTotal" хороший, но в методе AffTransa число всегда 0

Спасибо за вашу помощь;)

Ответы [ 3 ]

3 голосов
/ 25 февраля 2020

Таким образом, это невозможно. Теперь prixTotal находится в области действия метода и недоступен извне. Но вы можете переместить decimal prixTotal = 0; в область видимости класса, и тогда эта переменная будет доступна из обоих методов.

Class A
{
    private decimal prixTotal = 0;

    private void Method A ....
}
2 голосов
/ 25 февраля 2020

Я пытался вызвать метод, подобный этому, но это не работает десятичное число 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;
    ...
    }
    
0 голосов
/ 25 февраля 2020

Я не вижу, как это сработает.

Вы звоните

private string RecupPrixTransaction(XmlDocument doc)

, что для меня предполагает, что метод возвращает строку и передает XmlDocument

но то, что вы передаете, это

decimal recapPrixTotal = RecupPrixTransaction(prixTotal);

Где, похоже, вы хотите decimal и передать (по крайней мере нам) переменную с именем prixTotal

Если вы хотите, чтобы он возвращал decimal, я предлагаю изменить тип возвращаемого значения метода, предполагая, что вы передаете ему XmlDocument.

Если они находятся в одном классе, я не понять, почему вышесказанное не ударит по методу.

...