0

对不起,我是新手,我不知道如何在标题中正确提出我的问题。我有一个数据库:

class PlayerData
    {
        public ulong id;
        public string name;
        public int kills;
        public int deaths;
    }

我想返回与请求的键对应的值

object getStats(ulong uid, string stat)
    {
        var player = BasePlayer.FindByID(uid);
        PlayerData data = PlayerData.Find(player);

        object value = data.TryGetValue(stat); // I know this ain't right

        return value;
    }

例子:

int kills = getStats(123456, kills); //will ask for the value of "kills" in the data. Return data.kills

stat 可以是数据中的任何内容(id、name、kills、deaths)

多谢!

4

2 回答 2

0

我想您在这里尝试做的是根据对象名称获取对象值?如果是这样的话,我认为你可以使用反射来实现这一点。您可以参考这个答案:Get property value from string using reflection in C#

示例代码:

class PlayerData
{
    public ulong id;
    public string name;
    public int kills;
    public int deaths;
}

object getStats(ulong uid, string stat)
{
    var player = BasePlayer.FindByID(uid);
    PlayerData data = PlayerData.Find(player);

    object value = data.GetType().GetProperty(stat).GetValue(data, null);

    return value;
}
于 2018-06-08T00:31:11.053 回答
0

您可以接受 Sun Maung Oo 的使用 switch 语句的建议:

object TryGetValue(int playerId, string name)
{
    var player = GetPlayer(playerId);
    switch (name)
    {
        case "name": return name;
        case "kills": return kills;

        // Other properties
        // ...

        default: return null;
    }
}

或者您可以展平数据:

public class Statistic
{
    public int PlayerId { get; set; }
    public string Name { get; set; }
    public object Value { get; set; }
}

然后找到该值就是找到具有给定玩家 ID 和名称的统计数据的问题。

于 2018-06-07T23:58:41.873 回答