c# - C#:使用字符串参数从类列表中返回数据
问题描述
我有一个 Gain 类和这个类的列表,其中包含数据:
internal class Gain {
internal string asset { get; set; }
internal float amount { get; set; }
internal float cost { get; set; }
}
private static List<Gain> Gains = new List<Gain>();
用户可以发送字符串命令,如“资产名称”或“金额”,以获取特定数据。
string asset="AssetName";
string datatype="amount"; // or "cost" etc
在 C# 中,是否有一种简洁的语法可以仅在一行中为增益列表中的特定资产选择特定数据,例如:
return Gains[AssetName].[datatype]; // or something like this
解决方案
简而言之 - 不。它没有完全回答您的问题,但您可以使用LINQ:
Gains
.Where(g => g.asset == asset)
.Select(g => g.amount)
.FirstOrDefault() // or First, or Single or SingleOrDefault
如果您希望选择基于一定数量的字符串是动态的,您将需要通过一些反射魔术或创建基于字符串的谓词和选择函数字典自己实现它(如果您不这样做,您将遇到返回类型的一些问题'不想将所有内容都转换为对象)。
此外,您可以利用 C# 类型系统、泛型和传递函数(lambdas)的能力来代替字符串:
internal static T Get<T>(string assetName, Func<Gain, T> selector)
{
return Gains.Where(g => g.asset == assetName).Select(selector).First();
}
随着用法:
Get(asset, g => g.amount)
推荐阅读
- wordpress - 我正在寻找一个购买插件
- postgresql - 复合唯一键的 Gorm 标签
- reactjs - if/else 条件或循环获取?
- json - 用jq简化geojson坐标精度
- python - 使用 BeautifulSoup 抓取不同的 URL 和特定行
- azure - Azure 功能的服务总线触发器是否需要管理对服务总线队列/主题的访问权限?
- mongodb - 如何使用动态键和动态值编写spring data mongodb查询?
- python - 为什么python要求我从主包目录上方的文件中导入?
- macos - 自动更新订阅 latest_receipt_info 数组顺序是否在 MacOS 中颠倒?
- audio - 混合来自各种来源的音频,无论输入视频是否有声音