【问题标题】:How to convert from a string to a Flags enum format in C#如何在 C# 中从字符串转换为标志枚举格式
【发布时间】:2017-03-12 03:13:31
【问题描述】:

我有这个枚举:

[Flags]
public enum Countries
{
    None    = 0,
    USA     = 1,
    Mexico  = 2,
    Canada  = 4,
    Brazil  = 8,
    Chile   = 16
}

我收到这样的输入字符串:

string selectedCountries = "Usa, Brazil, Chile";

如何将其(在 C# 中)转换回:

var myCountries = Countries.Usa | Countries.Brazil | Countries.Chile;

【问题讨论】:

  • 你能修复字符串初始化吗?
  • 不,我不能,我只是收到格式化为标志枚举保存到字符串中的默认方式的字符串。
  • 不应该是string selectedCountries = "Usa, Brazil, Chile";吗?
  • 你是对的 Maor,我的错,我会编辑问题。

标签: c# enums type-conversion enum-flags


【解决方案1】:

实际上我意识到这比我想象的要容易。 我需要做的就是将该字符串转换为 int,在我的情况下,或者一般来说是 long,然后将其转换为国家。 它将将该数字转换为预期的格式。 换句话说:

(Countries) 25 = Countries.Usa | Countries.Brazil | Countries.Chile;

【讨论】:

  • 这似乎不是有效的 C#。
  • 好吧,帕特里克,我的意思是用枚举铸造一个 int 等于位的“或”。美国 + 巴西 + 智利 = 1 +8 +16 = 25 虽然不是 C# 代码。
【解决方案2】:

使用Enum.Parse。

例如Countries c = (Countries)Enum.Parse(typeof(Countries), "Usa, Brazil...");

【讨论】:

  • 我同意它应该 Enum.Parse 但不认为你可以将整个字符串直接传递给 Enum.Parse。
  • 是的,你可以,我只是测试了一下。您实际上是将该字符串转换为数字,然后将其转换为枚举。谢谢泰伦
  • @Paul_T 你是说你可以将字符串Usa, Brazil 直接传递给Enum.Parse 并且它有效吗?
  • 这是正确的 stt106:如果您将字符串“美国、巴西、智利”传递给 Enum.parse,它将起作用。在此电话之后国家 c = (Countries)Enum.Parse(typeof(Countries), "Usa, Brazil..."); c 商店 Country.Usa |国家.巴西 |国家.智利
【解决方案3】:

假设您的国家/地区字符串用逗号分隔,这似乎对我有用:

private static Countries ConvertToCountryEnum(string country)
        {
            return country.Split(',').Aggregate(Countries.None, (seed, c) => (Countries)Enum.Parse(typeof(Countries), c, true) | seed);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2015-06-10
    • 2012-04-12
    相关资源
    最近更新 更多