Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查枚举中是否存在URL中的字符串值,并在结果中将其值分配给变量?_C#_Enums - Fatal编程技术网

C# 如何检查枚举中是否存在URL中的字符串值,并在结果中将其值分配给变量?

C# 如何检查枚举中是否存在URL中的字符串值,并在结果中将其值分配给变量?,c#,enums,C#,Enums,我想检查我的urlPath WEB部分是否包含在枚举中,如果是,则在另一个变量中返回其值 var urlPath = "SomeThing/Web"; private enum ClientTypes { Mob = 0, Web = 1 } var client = urlPath.Contains(ClientTypes.Any()) // something like this

我想检查我的urlPath WEB部分是否包含在枚举中,如果是,则在另一个变量中返回其值

    var urlPath = "SomeThing/Web";

    private enum ClientTypes
        {
            Mob = 0,
            Web = 1
        }

     var client = urlPath.Contains(ClientTypes.Any()) // something like this

如何检查url中的Web部件是否存在于枚举中,并返回其值并将其分配给客户端属性?

您可以基于/拆分url并与枚举名称进行比较。例如,如果您只想知道Enum是否存在,那么可以使用

var enumNames = Enum.GetNames(typeof(ClientTypes));
var result = urlPath.Split('/').Any(x=> enumNames.Contains(x));
var client = Enum.Parse(typeof(ClientTypes), urlPath.Split('/')
                                                    .FirstOrDefault(x=> enumNames.Contains(x)));
var clients = urlPath.Split('/')
                     .Where(x=> enumNames.Contains(x))
                     .Select(x=> Enum.Parse(typeof(ClientTypes),x));
如果要检索特定的枚举,则可以使用

var enumNames = Enum.GetNames(typeof(ClientTypes));
var result = urlPath.Split('/').Any(x=> enumNames.Contains(x));
var client = Enum.Parse(typeof(ClientTypes), urlPath.Split('/')
                                                    .FirstOrDefault(x=> enumNames.Contains(x)));
var clients = urlPath.Split('/')
                     .Where(x=> enumNames.Contains(x))
                     .Select(x=> Enum.Parse(typeof(ClientTypes),x));
如果存在多个事件,并且您希望检索所有事件,则可以使用

var enumNames = Enum.GetNames(typeof(ClientTypes));
var result = urlPath.Split('/').Any(x=> enumNames.Contains(x));
var client = Enum.Parse(typeof(ClientTypes), urlPath.Split('/')
                                                    .FirstOrDefault(x=> enumNames.Contains(x)));
var clients = urlPath.Split('/')
                     .Where(x=> enumNames.Contains(x))
                     .Select(x=> Enum.Parse(typeof(ClientTypes),x));

您可以基于/拆分Url,并与枚举名称进行比较。例如,如果您只想知道Enum是否存在,那么可以使用

var enumNames = Enum.GetNames(typeof(ClientTypes));
var result = urlPath.Split('/').Any(x=> enumNames.Contains(x));
var client = Enum.Parse(typeof(ClientTypes), urlPath.Split('/')
                                                    .FirstOrDefault(x=> enumNames.Contains(x)));
var clients = urlPath.Split('/')
                     .Where(x=> enumNames.Contains(x))
                     .Select(x=> Enum.Parse(typeof(ClientTypes),x));
如果要检索特定的枚举,则可以使用

var enumNames = Enum.GetNames(typeof(ClientTypes));
var result = urlPath.Split('/').Any(x=> enumNames.Contains(x));
var client = Enum.Parse(typeof(ClientTypes), urlPath.Split('/')
                                                    .FirstOrDefault(x=> enumNames.Contains(x)));
var clients = urlPath.Split('/')
                     .Where(x=> enumNames.Contains(x))
                     .Select(x=> Enum.Parse(typeof(ClientTypes),x));
如果存在多个事件,并且您希望检索所有事件,则可以使用

var enumNames = Enum.GetNames(typeof(ClientTypes));
var result = urlPath.Split('/').Any(x=> enumNames.Contains(x));
var client = Enum.Parse(typeof(ClientTypes), urlPath.Split('/')
                                                    .FirstOrDefault(x=> enumNames.Contains(x)));
var clients = urlPath.Split('/')
                     .Where(x=> enumNames.Contains(x))
                     .Select(x=> Enum.Parse(typeof(ClientTypes),x));

您可以创建一个通用方法来拆分url,并尝试将每个部分转换为枚举值。这与枚举类型无关。可以在调用此方法时定义枚举类型。正如我在注释中已经提到的,使用字符串并将字符串转换为枚举值

public IEnumerable<TEnum> TryParseUrlToEnum<TEnum>(string url) where TEnum : struct, IConvertible
{
    foreach (var element in url.Split('/'))
    {
        if (Enum.TryParse<TEnum>(element, out TEnum enumValue))
        {
            yield return enumValue;
        }
    }
}
你可以这样称呼它:

var urlPath = "SomeThing/Web";
List<ClientTypes> enumValues = TryParseUrlToEnum<ClientTypes>(urlPath).ToList();
这还允许您分析url中的多个事件:

var urlPath = "SomeThing/Web/somethingElse/Mob";
List<ClientTypes> enumValues = TryParseUrlToEnum<ClientTypes>(urlPath).ToList();
Console.WriteLine(string.Join(Environment.NewLine, enumValues));
输出:

网 暴徒


您可以创建一个通用方法来拆分url,并尝试将每个部分转换为枚举值。这与枚举类型无关。可以在调用此方法时定义枚举类型。正如我在注释中已经提到的,使用字符串并将字符串转换为枚举值

public IEnumerable<TEnum> TryParseUrlToEnum<TEnum>(string url) where TEnum : struct, IConvertible
{
    foreach (var element in url.Split('/'))
    {
        if (Enum.TryParse<TEnum>(element, out TEnum enumValue))
        {
            yield return enumValue;
        }
    }
}
你可以这样称呼它:

var urlPath = "SomeThing/Web";
List<ClientTypes> enumValues = TryParseUrlToEnum<ClientTypes>(urlPath).ToList();
这还允许您分析url中的多个事件:

var urlPath = "SomeThing/Web/somethingElse/Mob";
List<ClientTypes> enumValues = TryParseUrlToEnum<ClientTypes>(urlPath).ToList();
Console.WriteLine(string.Join(Environment.NewLine, enumValues));
输出:

网 暴徒


您需要解析url并使用该方法,或者更好地使用解析url并使用该方法所需的方法,或者更好地使用该方法