首页 > 解决方案 > 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

标签: c#classsyntax

解决方案


简而言之 - 不。它没有完全回答您的问题,但您可以使用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)

推荐阅读