我可以使用枚举作为键值对.
public enum infringementCategory
{
Infringement,
OFN
}
Run Code Online (Sandbox Code Playgroud)
如果我选择Infringement我应该得到"INF0001"如果我选择OFN我应该得到"INF0002"
可能吗?
我怎么能有ac#enum,如果我选择字符串它返回一个不同的字符串,就像在java中它可以完成
public enum sample{
some, other, things;
public string toString(){
switch(this){
case some: return "you choose some";
default: break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Console.writeln(sample.some) 将输出:
you choose some
Run Code Online (Sandbox Code Playgroud)
我只想让我的枚举在我尝试调用它们时返回不同的字符串.
我已经看到很多关于将字符串映射到枚举的问题和答案,反之亦然,但是如何将一系列本地化字符串映射到枚举?
我应该只创建一个这样的扩展方法,从资源文件中返回正确的字符串吗?有没有办法本地化在这样的解决方案中使用的属性(如"描述")?
哪个是首选解决方案 - 扩展方法或属性.在我看来,这不是属性的预期目的.事实上,现在我考虑一下,如果我使用扩展方法,属性似乎就像我用来在资源文件中为我想要用来代替枚举值的本地化字符串指定一个键.
编辑 - 示例:
鉴于以下枚举,
public enum TransactionTypes {
Cheque = 1,
BankTransfer = 2,
CreditCard = 3
}
Run Code Online (Sandbox Code Playgroud)
我想要一种方法将每种类型映射到本地化的字符串.我开始使用枚举的扩展方法,该方法使用switch语句和对资源文件的强类型引用.
但是,每个枚举的扩展方法似乎不是一个很好的解决方案.我已经开始遵循此操作为每个枚举值创建自定义属性.该属性具有包含本地化字符串的资源文件的基本名称和键.例如,在上面的枚举中,我有:
...
[EnumResourceAttribute("FinancialTransaction", "Cheque")]
Cheque = 1,
...
Run Code Online (Sandbox Code Playgroud)
其中"FinanacialTransaction"是resx文件,"Check"是字符串键.我正在尝试创建一个实用程序方法,我可以从任何枚举中传递任何值,并让它返回该值的本地化字符串表示形式,假设指定了自定义属性.我无法弄清楚如何动态访问资源文件及其中的密钥.
我有这样的枚举
enum Animal:byte
{
Cat=0,
Dog=1,
Horse=2
}
Run Code Online (Sandbox Code Playgroud)
我想覆盖ToString()它来编写一个自定义字符串,因为我的应用程序是一个多语言的(Cat.ToString()应该检索cat的翻译单词).所以Descriptionkeyowrd不能在这里使用.任何人都给我一个提示,找到一个简洁的方法来解决这个问题?
如果我想将数据库中spicelevel列的值限制为1、2和3,则可以执行以下操作
private enum SpiceLevel
{
Low=1,
Medium=2,
Hot=3
}
Run Code Online (Sandbox Code Playgroud)
然后在代码中,我可以(int)SpiceLevel.Low选择1作为香料级别。
现在,如果我需要在数据库中只接受“ Red Rose”,“ White Rose”和“ Black Rose”作为列的值,该怎么办?有什么合适的方法来解决这个问题?
我正在考虑将它们存储在配置文件或常量中,但是它们都不像枚举那样优雅。有任何想法吗?
更新:
答案在这里为我工作
我在项目中的所有类和命名空间之外声明了以下枚举:
public enum ServerType { Database, Web } // there are more but omitted for brevity
我想用以下内容覆盖该ToString()方法:
public override string ToString(ServerType ServerType)
{
switch (ServerType)
{
case ServerType.Database:
return "Database server";
case ServerType.Web:
return "Web server";
}
// other ones, just use the base method
return ServerType.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误 no suitable method found to override
使用我自己的方法转换为字符串时是否可以覆盖枚举?
如何获得Enum值的列表?
例如,我有以下内容:
public enum ContactSubjects
{
[Description("General Question")]
General,
[Description("Availability/Reservation")]
Reservation,
[Description("Other Issue")]
Other
}
Run Code Online (Sandbox Code Playgroud)
我需要做的是将ContactSubject.General作为参数传递,它返回描述的列表.
此方法需要使用任何枚举,而不仅仅是ContactSubject(在我的示例中).签名应该类似于GetEnumDescriptions(枚举值).
public enum WebWizDateFormat
{
DDMMYY,
MMDDYY,
YYDDMM,
YYMMDD
}
Run Code Online (Sandbox Code Playgroud)
public class WebWizForumUser
{
public WebWizDateFormat DateFormat { get; set; }
public WebWizForumUser()
{
this.DateFormat = WebWizDateFormat.DDMMYY;
HttpContext.Current.Response.Write(this.DateFormat);
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但是当我响应时,它需要以"dd/mm/yy"的格式出现,我该怎么做?
我可以像下面这样使用enum吗?
我可以像TeamManager,TeamLeader,SeniorDeveloper等那样做.但我想在"团队经理"这样的词之间留一个空格
public enum SoftwareEmployee
{
Team Manager = 1,
Team Leader = 2,
Senior Developer = 3,
Junior = 4
}
Run Code Online (Sandbox Code Playgroud) c# ×9
enums ×7
.net ×1
asp.net ×1
attributes ×1
c#-4.0 ×1
c#-5.0 ×1
coding-style ×1
oop ×1
overriding ×1
string ×1
types ×1