自定义枚举作为 C# 中的应用程序设置类型?
Posted
技术标签:
【中文标题】自定义枚举作为 C# 中的应用程序设置类型?【英文标题】:Custom enum as application setting type in C#? 【发布时间】:2011-01-12 03:44:34 【问题描述】:如果在 C# 中有一个枚举:
[Serializable]
public enum OperatingSystem
Windows,
Macintosh
对于我的应用程序,我使用应用程序设置,我可以在其中选择应该设置的类型。我想当我选择 Browse 时,我可以选择我的枚举或键入完全限定的路径来选择该枚举作为类型。
编辑: 我将类型设置为我的枚举,但在值中(Windows,Macintosh 应该是)只有 Windows 是可见的,我可以输入任何字符串。
【问题讨论】:
请修复丢失的图片。 【参考方案1】:我知道这篇文章已经很老了,并且已被标记为已回答。但也许我可以为尝试上述解决方案的人们节省一些时间。
我正在使用 VS2019,如 AlanN 和 Sky Sanders 所示,可以通过手动输入全名或选择自定义类型来定义自定义类型它从列表中。后者仅在另一个引用程序集中定义时才有效(不要忘记事先构建它),这是一个已知限制,如下所述:DocMicrosoft: Create Application Settings using the designer。
我这样做的全部目的是为用户提供固定选项,这样他就不必检查哪些字符串是允许的,哪些是不允许的。问题是选项并没有始终如一地出现。有时,编译程序后,您将看不到选项;他们走了。有时,在重新启动 Visual Studio 后,它们又回来了。 Sean 在另一个 *** 帖子 here 中已经说明了这个问题。
【讨论】:
【参考方案2】:不要忘记添加对项目的引用,因为枚举应该(!)不在您的主项目中,它应该(!)在其他地方。 然后在主项目属性的设置选项卡中显示“字符串”的位置,您可以通过单击下拉框选择另一个选项。从选项中选择“浏览”。您将看到一些通用的 Microsoft 选项,但键入您的枚举名称,并以它的命名空间为前缀,例如 Common.MyEnum。 这应该可以解决问题。
【讨论】:
【参考方案3】:对所有先前答案的小补充。 至于我 - 在我的自定义枚举成功添加到“自定义类型”文本框之前,需要构建解决方案。
【讨论】:
【参考方案4】:当然 - 只需向您的项目添加一个可序列化的枚举,选择浏览并输入命名空间限定名称,例如ClassLibrary1.OperatingSystems。宾果游戏。
"我将类型设置为我的枚举,但在 值(Windows、Macintosh 应该 是)只有 Windows 是可见的,我是 可以输入任何字符串”。
您是否尝试过输入“windows”或“macintosh”以外的内容?你看到的行为与你想要得到的一样接近。我对此很有信心。
无论如何……祝你好运。
在此处查看done in 30 seconds。
【讨论】:
正如你在我的帖子中看到的,我已经有了一个可序列化的枚举。这就是问题:) 有什么问题?这与您将要获得的一样接近。 ;-) 喜欢截屏视频。看到它有助于回答我的后续问题。【参考方案5】:我在 VC# Express 2005 中看到了这一点。Browse..“Select a Type”对话框仅显示 System 和 Microsoft 命名空间。但是,如果您将类型的全名插入到 Selected Type 文本框中,它应该会接受它。
【讨论】:
确实如此。但是不显示这些值,或者它只显示一个带有“Windows”的文本框。但我什至可以给它“这是一个字符串”的值。 正常的,在XML中数据是以字符串的形式存储的。理论上,您可以在 Enum 中输入另一个值(这就是 Enum.IsDefined 存在的原因)。它会抛出一个异常,但你可以做到:)。 仅供参考,这也适用于用户设置。我试过了,效果很好!【参考方案6】:我不知道我是否很好地理解了您的问题,但是当我创建一个 custom configuration section 以在我的应用程序配置文件中使用时,我使用 TypeConverter attribute 和 EnumConverter 创建了一个枚举属性。
希望对您有所帮助,但如果我对您的问题的理解有误,请告诉我。
【讨论】:
我对您描述的场景没有经验,但我会给 SettingsSerializeAsAttribute 一个机会。尝试将其应用于您的枚举并将 SettingsSerializeAs.String 作为参数传递。以上是关于自定义枚举作为 C# 中的应用程序设置类型?的主要内容,如果未能解决你的问题,请参考以下文章