首页 > 解决方案 > 如何使用字符串从多个类中获取变量的值

问题描述

我正在尝试制作可以加载各种数据的表。数据格式是类,类中有各种变量,格式是字符串、浮点数和双精度。

我的数据格式如下。所有数据将保存到 TotalData 类

public class TotalData
{
    public List<A> aList;
    public List<B> bList;
}

public class A
{
    public int classA_intA;
    public int classA_intB;
    public float classA_floatA;
    public float classA_floatB;
}

public class B
{
    public int classB_intA;
    public int classB_intB;
    public double classB_doubleA;
    public double classB_doubleB;
    public double classB_doubleC;
    public double classB_doubleD;
    public double classB_doubleE;
    public double classB_doubleF;
}


设置完成后,我想按类名和变量名搜索特定数据。

例如,如果我想获取classB_doubleB,那么我需要bList的名称作为字符串从 TotalData 和 classB_doubleB 的名称中搜索,这样我就可以获得classB_doubleB的值


public object GetValueFromTotalData(string getDataFromClass, 
                                    string nameOfVariable, 
                                    TotalData data, 
                                    int indexOfList) 
{
    //The string getDataFromClass selects a list to find the variable.

    //The string nameOfVariable selects variable which in selected class

    //indexofList is for choose index of aList or bList
    return value;
}

我希望有人能解决我的问题。谢谢你。:)

PS。下面的脚本是我实际工作的数据格式。

[System.Serializable]
public class TotalData
{
    public string date;
    public string symbol;
    public string fillingDate;
    public string acceptedDate;
    public string period;
    public string link;
    public string finalLink;
    public List<IncomeStatement> IncomeStatement;
    public List<BalanceSheet> BalanceSheet;
    public List<CashFlow> CashFlow;
    public List<FinancialRatios> FinancialRatios;
    public List<EnterpriceValue> EnterpriceValue;
    public List<KeyMetrics> KeyMetrics;
    public List<FinancialGrowth> FinancialGrowth;


       public TotalData(IncomeStatements incomeStatement, List<BalanceSheet> balance, List<CashFlow> cashFlow, List<FinancialRatios> financialRatios, List<EnterpriceValue> enterpriceValue, List<KeyMetrics> keyMetrics, List<FinancialGrowth> financialGrowth)
    {
        this.date = incomeStatement.date;
        this.symbol = incomeStatement.symbol;
        this.fillingDate = incomeStatement.fillingDate;
        this.acceptedDate = incomeStatement.acceptedDate;
        this.period = incomeStatement.period;
        this.link = incomeStatement.link;
        this.finalLink = incomeStatement.finalLink;
        this.IncomeStatement = incomeStatement;
        this.BalanceSheet = balance;
        this.CashFlow = cashFlow;
        this.FinancialRatios = financialRatios;
        this.EnterpriceValue = enterpriceValue;
        this.KeyMetrics = keyMetrics;
        this.FinancialGrowth = financialGrowth;
    }
}

[System.Serializable]
public class IncomeStatements : IncomeStatement
{
    public string date;
    public string symbol;
    public string fillingDate;
    public string acceptedDate;
    public string period;
    public string link;
    public string finalLink;
}

[System.Serializable]
public class IncomeStatement
{
    public double revenue;
    public double costOfRevenue;
    public double grossProfit;
    public double grossProfitRatio;


    [Header("Cost And Expenses")]
    public double researchAndDevelopmentExpenses;
    public double generalAndAdministrativeExpenses;
    public double sellingAndMarketingExpenses;
    public double otherExpenses;
    public double operatingExpenses;
    public double costAndExpenses;
    public double interestExpense;


    [Header("EBITDA")]
    public double depreciationAndAmortization;
    public double ebitda;
    public double ebitdaratio;


    [Header("Income")]
    public double operatingIncome;
    public double operatingIncomeRatio;
    public double totalOtherIncomeExpensesNet;
    public double incomeBeforeTax;
    public double incomeBeforeTaxRatio;
    public double incomeTaxExpense;
    public double netIncome;
    public double netIncomeRatio;


    [Header("EPS")]
    public double eps;
    public double epsdiluted;
    public double weightedAverageShsOut;
    public double weightedAverageShsOutDil;
}


[System.Serializable]
public class BalanceSheet
{

    [Header("Current Assets")]
    public double cashAndCashEquivalents;
    public double shortTermInvestments;
    public double cashAndShortTermInvestments;
    public double netReceivables;
    public double inventory;
    public double otherCurrentAssets;
    public double totalCurrentAssets;

    [Header("Non Current Assets")]
    public double propertyPlantEquipmentNet;
    public double goodwill;
    public double intangibleAssets;
    public double goodwillAndIntangibleAssets;
    public double longTermInvestments;
    public double taxAssets;
    public double otherNonCurrentAssets;
    public double totalNonCurrentAssets;

    [Header("Total Assets")]
    public double otherAssets;
    public double totalAssets;


    [Header("CURRENT LIABILITIES")]
    public double accountPayables;
    public double shortTermDebt;
    public double taxPayables;
    public double deferredRevenue;
    public double otherCurrentLiabilities;
    public double totalCurrentLiabilities;


    [Header("NON CURRENT LIABILITIES")]
    public double longTermDebt;
    public double deferredRevenueNonCurrent;
    public double deferredTaxLiabilitiesNonCurrent;
    public double otherNonCurrentLiabilities;
    public double totalNonCurrentLiabilities;


    [Header("TOTAL LIABILITIES")]
    public double otherLiabilities;
    public double totalLiabilities;


    [Header("STOCKHOLDERS EQUITY")]
    public double commonStock;
    public double retainedEarnings;
    public double accumulatedOtherComprehensiveIncomeLoss;
    public double othertotalStockholdersEquity;
    public double totalStockholdersEquity;


    [Header("LIABILITIES and EQUITY")]
    public double totalLiabilitiesAndStockholdersEquity;


    [Header("INVESTMENT and DEBT")]
    public double totalInvestments;
    public double totalDebt;
    public double netDebt;
}

[System.Serializable]
public class CashFlow
{

    [Header("CashProvidedByOperatingActivites")]
    public double netIncome;
    public double depreciationAndAmortization;
    public double deferredIncomeTax;
    public double stockBasedCompensation;
    public double changeInWorkingCapital;
    public double accountsReceivables;
    public double inventory;
    public double accountsPayables;
    public double otherWorkingCapital;
    public double otherNonCashItems;
    public double netCashProvidedByOperatingActivities;


    [Header("CashProvidedByInvestingActivites")]
    public double investmentsInPropertyPlantAndEquipment;
    public double acquisitionsNet;
    public double purchasesOfInvestments;
    public double salesMaturitiesOfInvestments;
    public double otherInvestingActivites;
    public double netCashUsedForInvestingActivites;


    [Header("CashProvidedByFinancingingActivites")]
    public double debtRepayment;
    public double commonStockIssued;
    public double commonStockRepurchased;
    public double dividendsPaid;
    public double otherFinancingActivites;
    public double netCashUsedProvidedByFinancingActivities;


    [Header("Other")]
    public double effectOfForexChangesOnCash;


    [Header("Cash&CashFlow")]
    public double netChangeInCash;
    public double cashAtEndOfPeriod;
    public double cashAtBeginningOfPeriod;
    public double operatingCashFlow;
    public double capitalExpenditure;
    public double freeCashFlow;
}
[System.Serializable]
public class FinancialRatios
{

    public float currentRatio;
    public float quickRatio;
    public float cashRatio;
    public float daysOfSalesOutstanding;
    public float daysOfInventoryOutstanding;
    public float operatingCycle;
    public float daysOfPayablesOutstanding;
    public float cashConversionCycle;
    public float grossProfitMargin;
    public float operatingProfitMargin;
    public float pretaxProfitMargin;
    public float netProfitMargin;
    public float effectiveTaxRate;
    public float returnOnAssets;
    public float returnOnEquity;
    public float returnOnCapitalEmployed;
    public float netIncomePerEBT;
    public float ebtPerEbit;
    public float ebitPerRevenue;
    public float debtRatio;
    public float debtEquityRatio;
    public float longTermDebtToCapitalization;
    public float totalDebtToCapitalization;
    public float interestCoverage;
    public float cashFlowToDebtRatio;
    public float companyEquityMultiplier;
    public float receivablesTurnover;
    public float payablesTurnover;
    public float inventoryTurnover;
    public float fixedAssetTurnover;
    public float assetTurnover;
    public float operatingCashFlowPerShare;
    public float freeCashFlowPerShare;
    public float cashPerShare;
    public float payoutRatio;
    public float operatingCashFlowSalesRatio;
    public float freeCashFlowOperatingCashFlowRatio;
    public float cashFlowCoverageRatios;
    public float shortTermCoverageRatios;
    public float capitalExpenditureCoverageRatio;
    public float dividendPaidAndCapexCoverageRatio;
    public float dividendPayoutRatio;
    public float priceBookValueRatio;
    public float priceToBookRatio;
    public float priceToSalesRatio;
    public float priceEarningsRatio;
    public float priceToFreeCashFlowsRatio;
    public float priceToOperatingCashFlowsRatio;
    public float priceCashFlowRatio;
    public float priceEarningsToGrowthRatio;
    public float priceSalesRatio;
    public float dividendYield;
    public float enterpriseValueMultiple;
    public float priceFairValue;

}
[System.Serializable]
public class EnterpriceValue
{
    public float stockPrice;
    public long numberOfShares;
    public long marketCapitalization;
    public long minusCashAndCashEquivalents;
    public long addTotalDebt;
    public long enterpriseValue;
}
[System.Serializable]
public class KeyMetrics
{

    public float revenuePerShare;
    public float netIncomePerShare;
    public float operatingCashFlowPerShare;
    public float freeCashFlowPerShare;
    public float cashPerShare;
    public float bookValuePerShare;
    public float tangibleBookValuePerShare;
    public float shareholdersEquityPerShare;
    public float interestDebtPerShare;
    public float marketCap;
    public float enterpriseValue;
    public float peRatio;
    public float priceToSalesRatio;
    public float pocfratio;
    public float pfcfRatio;
    public float pbRatio;
    public float ptbRatio;
    public float evToSales;
    public float enterpriseValueOverEBITDA;
    public float evToOperatingCashFlow;
    public float evToFreeCashFlow;
    public float earningsYield;
    public float freeCashFlowYield;
    public float debtToEquity;
    public float debtToAssets;
    public float netDebtToEBITDA;
    public float currentRatio;
    public float interestCoverage;
    public float incomeQuality;
    public float dividendYield;
    public float payoutRatio;
    public float salesGeneralAndAdministrativeToRevenue;
    public float researchAndDdevelopementToRevenue;
    public float intangiblesToTotalAssets;
    public float capexToOperatingCashFlow;
    public float capexToRevenue;
    public float capexToDepreciation;
    public float stockBasedCompensationToRevenue;
    public float grahamNumber;
    public float roic;
    public float returnOnTangibleAssets;
    public float grahamNetNet;
    public float workingCapital;
    public float tangibleAssetValue;
    public float netCurrentAssetValue;
    public float investedCapital;
    public float averageReceivables;
    public float averagePayables;
    public float averageInventory;
    public float daysSalesOutstanding;
    public float daysPayablesOutstanding;
    public float daysOfInventoryOnHand;
    public float receivablesTurnover;
    public float payablesTurnover;
    public float inventoryTurnover;
    public float roe;
    public float capexPerShare;
}
[System.Serializable]
public class FinancialGrowth
{
    public float revenueGrowth;
    public float grossProfitGrowth;
    public float ebitgrowth;
    public float operatingIncomeGrowth;
    public float netIncomeGrowth;
    public float epsgrowth;
    public float epsdilutedGrowth;
    public float weightedAverageSharesGrowth;
    public float weightedAverageSharesDilutedGrowth;
    public float dividendsperShareGrowth;
    public float operatingCashFlowGrowth;
    public float freeCashFlowGrowth;
    public float tenYRevenueGrowthPerShare;
    public float fiveYRevenueGrowthPerShare;
    public float threeYRevenueGrowthPerShare;
    public float tenYOperatingCFGrowthPerShare;
    public float fiveYOperatingCFGrowthPerShare;
    public float threeYOperatingCFGrowthPerShare;
    public float tenYNetIncomeGrowthPerShare;
    public float fiveYNetIncomeGrowthPerShare;
    public float threeYNetIncomeGrowthPerShare;
    public float tenYShareholdersEquityGrowthPerShare;
    public float fiveYShareholdersEquityGrowthPerShare;
    public float threeYShareholdersEquityGrowthPerShare;
    public float tenYDividendperShareGrowthPerShare;
    public float fiveYDividendperShareGrowthPerShare;
    public float threeYDividendperShareGrowthPerShare;
    public float receivablesGrowth;
    public float inventoryGrowth;
    public float assetGrowth;
    public float bookValueperShareGrowth;
    public float debtGrowth;
    public float rdexpenseGrowth;
    public float sgaexpensesGrowth;
}

标签: c#reflection

解决方案


这将是解决您的问题的最佳方式。使用 if 语句来控制应用程序的流程。

public object GetValueFromTotalData(string getDataFromClass, 
                                    string nameOfVariable, 
                                    TotalData data, 
                                    int indexOfList) 
{
    //check the value string getDataFromClass and initialize the correct class to search from
    if(getDataFromClass == "aList"){
        //initialize and access aList
    } else {
        //initialize and access bList
    }

    //use the same if statements as above to access the correct class and initialize it

    //again use an if statement to select index of item from the list set up above
    return value;
}

但是,您可以使用可用于初始化正确类的接口。这两个具体类都将从该接口继承,您将在方法中使用正确的类来初始化接口。


推荐阅读