【发布时间】:2022-01-20 15:52:19
【问题描述】:
我使用了一个名为AccessMode 的枚举并为它构建了一个函数:
public static string ToString(this AccessMatrix.AccessMode am)
{
switch (am)
{
case AccessMatrix.AccessMode.Delete: return "Удалить";
case AccessMatrix.AccessMode.Insert: return "Добавить";
case AccessMatrix.AccessMode.Read: return "Прочитать";
case AccessMatrix.AccessMode.Update: return "Обновить";
case AccessMatrix.AccessMode.Grant: return "Передать права";
case AccessMatrix.AccessMode.Unset: return "Не выбрано";
default: throw new ArgumentException($"there's no such access mode");
}
}
但它为什么仍然使用默认的 ToString() 方法(并且不可能将 override 添加到函数中 - 它表示没有这样的函数可以覆盖)。我需要完全覆盖这个方法,因为我想用我的枚举覆盖默认的ToString() 行为,而不是为我使用这个方法——我将这个类添加到使用ToString() 显示元素名称的组合框(Windows 窗体)中。而且我认为不可能在不丢失价值的情况下更改 ComboBox 的文本。
我也尝试使用this method,但我不能使用switch,它说“预期的恒定值”。
是的,我不仅限于使用枚举。但是有最适合我的目的的类型。你能给我什么建议?如果 ToString() 无法覆盖枚举,你有什么建议?我需要:
- 我可以通过它的名称 (AccessMode.Name) 访问它
- 我可以轻松地将其转换为 int 并返回(嗯,我认为它适用于任何东西)
- 我可以重写它的 ToString() 方法
- 它是恒定的
目前,我正在使用枚举,通过我的 AccessMode.ToString 函数写入值并使用 string.ToAccessMode 将其取回,但感觉不对。有没有更好的办法?
【问题讨论】:
-
DisplayMember和ValueMember属性可能是您在此处需要的,尽管您不能直接使用AccessMode作为数据源。见How do I have an enum bound combobox with custom string formatting for enum values?
标签: c# winforms enums combobox tostring