亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 if 語句中使用占位符來訪問屬性

如何在 if 語句中使用占位符來訪問屬性

C#
森林海 2023-08-20 14:25:50
我不想使用大量 if 語句來確定需要訪問哪個屬性,而是想知道是否可以使用占位符之類的東西。我嘗試用占位符編寫一些代碼,這就是我遇到問題的地方。if (rootObject.permissions.{commandGroup}.{commandName}){    //do something                }這將允許訪問的屬性根據 commandGroup 和 commandName 中的字符串值進行更改,而無需在 JSON 擴展時使用多個 if 語句。這是 if 語句的問題://Command is an instance of CommandInfo from Discord.Netstring commandGroup = command.Module.Group;string commandName = command.Name;if (rootObject.permissions.commandGroup.commandName){    //do something}以下是 JSON 文件在類中的存儲方式:    internal class RootObject    {        public Permissions permissions { get; set; }        public int points { get; set; }    }    internal class Permissions    {        public Response response { get; set; }    }    internal class Response    {        public bool ping { get; set; }        public bool helloWorld { get; set; }    }例如,如果 commandGroup 是 Response 并且 commandName 是 ping,我將如何使用 if 語句來確定值是否存儲在 rootObject.permissions.response.ping 中。
查看完整描述

2 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

您可以使用反射來做到這一點,如下所示:


public static class PermissionsExtensions {

    public static T CommandGroup<T>(this Permissions permissions, string commandGroup)

    {

         PropertyInfo commandGroupProperty = typeof(Permissions).GetProperty(commandGroup);

         return (T)(commandGroupProperty.GetValue( permissions));

    }

    public static bool CommandProperty<T>(this T commandGroup, string commandProperty) 

    {

        PropertyInfo commandPropertyProperty = typeof(T).GetProperty( commandProperty);

        return (bool)(commandPropertyProperty.GetValue( commandGroup));

    }

}

然后你會像這樣使用它:


bool result = rootObject.permissions.CommandGroup<Response>( "response").CommandProperty( "ping");

提示:類中的屬性使用大寫名稱,參數使用小寫名稱


查看完整回答
反對 回復 2023-08-20
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

看來你要訪問的屬性都是bool。您可以將它們全部存儲在Dictionary<string, bool>:


internal class RootObject

{

    public Dictionary<string, bool> permissions { get; set; } = new Dictionary<string, bool> {

        { "response.ping", false },

        { "response.helloworld", false },

        // add more here...

    };

    public int points { get; set; }

}

現在你可以像這樣訪問字典:


if (rootObject.permissions[$"{commandGroup}.{commandName}"])


查看完整回答
反對 回復 2023-08-20
  • 2 回答
  • 0 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號