如何在 if 语句中使用占位符来访问属性

我不想使用大量 if 语句来确定需要访问哪个属性,而是想知道是否可以使用占位符之类的东西。


我尝试用占位符编写一些代码,这就是我遇到问题的地方。


if (rootObject.permissions.{commandGroup}.{commandName})

{

    //do something                

}


这将允许访问的属性根据 commandGroup 和 commandName 中的字符串值进行更改,而无需在 JSON 扩展时使用多个 if 语句。


这是 if 语句的问题:



//Command is an instance of CommandInfo from Discord.Net

string 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 中。


森林海
浏览 124回答 2
2回答

catspeake

您可以使用反射来做到这一点,如下所示:public static class PermissionsExtensions {&nbsp; &nbsp; public static T CommandGroup<T>(this Permissions permissions, string commandGroup)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PropertyInfo commandGroupProperty = typeof(Permissions).GetProperty(commandGroup);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (T)(commandGroupProperty.GetValue( permissions));&nbsp; &nbsp; }&nbsp; &nbsp; public static bool CommandProperty<T>(this T commandGroup, string commandProperty)&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; PropertyInfo commandPropertyProperty = typeof(T).GetProperty( commandProperty);&nbsp; &nbsp; &nbsp; &nbsp; return (bool)(commandPropertyProperty.GetValue( commandGroup));&nbsp; &nbsp; }}然后你会像这样使用它:bool result = rootObject.permissions.CommandGroup<Response>( "response").CommandProperty( "ping");提示:类中的属性使用大写名称,参数使用小写名称

弑天下

看来你要访问的属性都是bool。您可以将它们全部存储在Dictionary<string, bool>:internal class RootObject{&nbsp; &nbsp; public Dictionary<string, bool> permissions { get; set; } = new Dictionary<string, bool> {&nbsp; &nbsp; &nbsp; &nbsp; { "response.ping", false },&nbsp; &nbsp; &nbsp; &nbsp; { "response.helloworld", false },&nbsp; &nbsp; &nbsp; &nbsp; // add more here...&nbsp; &nbsp; };&nbsp; &nbsp; public int points { get; set; }}现在你可以像这样访问字典:if (rootObject.permissions[$"{commandGroup}.{commandName}"])
打开App,查看更多内容
随时随地看视频慕课网APP