c# - 如何使用字符串从多个类中获取变量的值
问题描述
我正在尝试制作可以加载各种数据的表。数据格式是类,类中有各种变量,格式是字符串、浮点数和双精度。
我的数据格式如下。所有数据将保存到 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;
}
解决方案
这将是解决您的问题的最佳方式。使用 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;
}
但是,您可以使用可用于初始化正确类的接口。这两个具体类都将从该接口继承,您将在方法中使用正确的类来初始化接口。
推荐阅读
- api - Katalon API 测试:如何传递两个或多个 json 数据
- azure - “Microsoft.Sql/servers/auditingSettings” 要求对非 vnet 存储帐户进行 StorageBlobContributor 访问
- python - 如何通过匹配数据框中的行值来更改列值?
- python-3.x - 将月份作为 x 刻度的数据集绘制的最佳方法是什么
- css - 如何在 React 的 @import'ed 样式表中读取 CSS 变量集?
- javascript - 如何使用 MongoDb 正确播种我的数据库并表达?
- android - Android Studio 自动完成功能如何在 RecyclerView 的 `app:layoutManager` 中工作?
- c# - 计算字段不显示数据报告 devexpress
- react-router-redux - 如何使用 ConnectedRouter 在新页面加载时滚动到顶部?
- google-colaboratory - 更改 COLAB 主帐户。如何更改我的 colab 应链接到的电子邮件/驱动器?