我最近看到一个使用这种风格的项目:
(SomeEnum)Enum.ToObject(typeof(SomeEnum), some int)
Run Code Online (Sandbox Code Playgroud)
而不是这种风格:
(SomeEnum)some int
Run Code Online (Sandbox Code Playgroud)
为什么要使用前者?这只是风格问题吗?
来自MSDN:
此转换方法返回Object类型的值.然后,您可以将其转换或转换为enumType类型的对象.
https://msdn.microsoft.com/en-us/library/ksbe1e7h(v=vs.110).aspx
在我看来,MSDN告诉我,我应该调用ToObject(),然后我可以强制转换.但我很困惑,因为我知道我可以在不调用该方法的情况下进行投射.ToObject()的目的是什么?它完成了什么简单的铸造不?
如果我有这个代码
//Spice Enums
enum SpiceLevels {None = 0 , Mild = 1, Moderate = 2, Ferocious = 3};
Run Code Online (Sandbox Code Playgroud)
其中陈述了枚举名称+他们的号码,如何从变量中调用枚举,如果变量是3,如何调用它并显示凶猛?
我正在将字符串类型的数值转换为相应的枚举.当我测试我的代码时,我发现有趣的行为令我感到困惑.
使用下面的代码示例,如果/当"s"变量的值与Enum值之一不匹配时,有人可以阐明为什么不抛出异常?另外,如何将sEnum var设置为Stooge枚举定义中不存在的值?
class Program
{
enum Stooge
{
Unspecified,
Moe,
Larry,
Curly,
Shemp
}
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("Enter a number...");
string s = Console.ReadLine();
Stooge sEnum = (Stooge)(int.Parse(s)); //Why doesn't this line throw if s != 0, 1, 2, 3, or 4?
Console.WriteLine("\r\nYou entered: {0}\r\nEnum String Value: {1}\r\nEnum Int Value: {2}\r\n", s, sEnum.ToString(), (int)sEnum);
}
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
在C#中将int强制转换为枚举
我从数据库中获取一个int值,并希望将值转换为枚举变量.在99.9%的情况下,int将匹配枚举声明中的一个值
public enum eOrderType {
Submitted = 1,
Ordered = 2,
InReview = 3,
Sold = 4,
...
}
eOrderType orderType = (eOrderType) FetchIntFromDb();
Run Code Online (Sandbox Code Playgroud)
在边缘情况下,该值将不匹配(无论是数据损坏还是某人手动进入并弄乱数据).
我可以使用switch语句捕获default并修复情况,但感觉不对.必须有一个更优雅的解决方案.
有任何想法吗?
我有一个如下定义的枚举类型:
public enum Status
{
Active=1,
InActive=0
}
Run Code Online (Sandbox Code Playgroud)
在我的方法中,我可以将参数转换为枚举,如下所示:
public string doSomething(string param1, int status)
{
//will this work?
Account.Status = (Status) status;
//or do i need to test one by one like this
if(status == 0)
{
Account.Status = Status.Inactive;
//and so on...
} // end if
} // end doSomething
Run Code Online (Sandbox Code Playgroud) 与这个问题基本相同,但是在Delphi Prism中:
我设法从字符串中做到这一点:
YourEnum := Enum.Parse(TypeOf(YourEnum), "mystr") as YourEnum
Run Code Online (Sandbox Code Playgroud)
但我尝试了以下操作,并收到类型不匹配错误:
YourEnum := 3 as YourNum
Run Code Online (Sandbox Code Playgroud)
你知道将 int 转换为 Enum 的语法是什么吗?
我有财产
public Enums.CustomEnumProp MyEnum { get; set; }
Run Code Online (Sandbox Code Playgroud)
其类型为 CustomEnumProp
public enum CustomEnumProp { A = 1, B = 2, C = 3}
Run Code Online (Sandbox Code Playgroud)
我需要使用传递的 int 值作为用户选择并将其分配给属性MyEnum。
forexampe:如果用户从组合框中选择了 2,则将此 int 分配给 MyEnum。
谢谢
我有一个对象.通常它是long或者string,所以为了简化代码,让我们假设它.
我必须创建一个方法,尝试将此对象转换为提供的枚举.所以:
public object ToEnum(Type enumType, object value)
{
if(enumType.IsEnum)
{
if(Enum.IsDefined(enumType, value))
{
var val = Enum.Parse(enumType, (string)value);
return val;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
使用字符串它很好.随着数字它会导致问题,因为一个默认基础类型是枚举int,而不是long和IsDefined抛出ArgumentException.
当然,我可以做很多检查,转换或尝试捕获.
我想要的是拥有一个干净而小巧的代码.任何想法如何使其可读和简单?
有什么方法可以使用ConsoleColors作为它们的Ints吗?喜欢
Console.ForeGroundColor = 10; //ConsoleColor.Green has the Value of 10
Run Code Online (Sandbox Code Playgroud)
但我只能使用
Console.ForeGroundColor = ConsoleColor.Green; //when hovering over "Green" Visual Studio even shows me that Green is 10
Run Code Online (Sandbox Code Playgroud)
我设法在注册表中找到这些Color-Ints(HKEY_CURRENT_USER/Console),其中Ints有颜色的hexCodes,但没有名称(我可以将Green的值更改为Orange并返回默认值,但不会无所谓).那么为什么C#或Visual Studio不允许我使用Ints?或者我做错了什么?
请尝试解释它而不使用引用枚举.我知道,这些颜色名称是枚举,但我还不了解枚举转换
我目前正在使用 .net core 2.2 和 EntityFramework 制作一个网络应用程序。
我有一个模型,它有 2 个计算属性“AgeYears”和“AgeMonths”,这些属性是根据类库的属性“Birthday”计算的。
当我运行 Web 应用程序,并且存在包含此模型的提取时,会引发错误:
System.InvalidOperationException:找不到实体类型“HorseModel”的属性“AgeMonths”的支持字段,并且该属性没有设置器。
我试图通过阅读几篇文章来弄清楚发生了什么,其中一篇位于 Microsoft 网站上,但只返回名字和姓氏(全名)的简单串联,而另一篇似乎不是最新的因为有些属性根本不可用,例如[计算]。通常,我不会理会属性,而只是在视图或页面模型中进行计算,但愚蠢地认为这将是一个更好/更干净的想法!?
这是导致问题的模型部分:
public DateTime Birthday { get; set; }
[NotMapped]
public int AgeYears
{
get
{
return DateTimeSpan.CompareDates(DateTime.Now, Birthday).Years;
}
}
[NotMapped]
public int AgeMonths
{
get
{
return DateTimeSpan.CompareDates(DateTime.Now, Birthday).Months;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试删除数据库和迁移,并在尝试再次运行初始迁移时出现错误,尽管将 [NotMapped] 添加到属性中。
我期望发生的是,当从数据库中获取记录时,会计算这些属性,并认为不需要将它们存储在数据库中。显然,我做错了什么,我认为这与使用我自己的函数进行计算有关。
为了使其工作,我按照错误建议添加了一个支持字段,当我查看迁移时,我注意到仍然为“NotMapped”值生成列。
migrationBuilder.CreateTable(
name: "Horses",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Name = table.Column<string>(nullable: true),
Birthday = table.Column<DateTime>(nullable: false),
AgeYears = table.Column<int>(nullable: false), …Run Code Online (Sandbox Code Playgroud) c# ×9
enums ×5
.net ×2
asp.net-core ×1
console ×1
delphi ×1
delphi-prism ×1
enumerable ×1
oxygene ×1
parsing ×1
registry ×1
sqlite ×1