可能重复:
通过其描述属性查找枚举值
我有一个通用的扩展方法,它Description从以下方式获取属性Enum:
enum Animal
{
[Description("")]
NotSet = 0,
[Description("Giant Panda")]
GiantPanda = 1,
[Description("Lesser Spotted Anteater")]
LesserSpottedAnteater = 2
}
public static string GetDescription(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
DescriptionAttribute attribute
= Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute))
as DescriptionAttribute;
return attribute == null ? value.ToString() : attribute.Description;
}
Run Code Online (Sandbox Code Playgroud)
所以我可以......
string myAnimal = Animal.GiantPanda.GetDescription(); // = "Giant Panda"
Run Code Online (Sandbox Code Playgroud)
现在,我正试图在另一个方向上找出等效函数,比如......
Animal a = (Animal)Enum.GetValueFromDescription("Giant Panda", typeof(Animal));
Run Code Online (Sandbox Code Playgroud) 我有以下内容 enum
public enum myEnum
{
ThisNameWorks,
This Name doesn't work
Neither.does.this;
}
Run Code Online (Sandbox Code Playgroud)
enum带有"友好名字"的s 不可能吗?
我有
public enum Als
{
[StringValue("Beantwoord")] Beantwoord = 0,
[StringValue("Niet beantwoord")] NietBeantwoord = 1,
[StringValue("Geselecteerd")] Geselecteerd = 2,
[StringValue("Niet geselecteerd")] NietGeselecteerd = 3,
}
Run Code Online (Sandbox Code Playgroud)
同
public class StringValueAttribute : Attribute
{
private string _value;
public StringValueAttribute(string value)
{
_value = value;
}
public string Value
{
get { return _value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我想将我从组合框中选择的项的值放入int:
int i = (int)(Als)Enum.Parse(typeof(Als), (string)cboAls.SelectedValue); //<- WRONG
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是的话,怎么样?(StringValue匹配从组合框中选择的值).
我的问题很简单,但比将枚举类型序列化为字符串的其他问题更具体一些.
考虑以下代码:
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public enum MyEnum
{
TypeOne,
TypeTwo,
TypeThree
}
public class Foo
{
[JsonConverter(typeof(StringEnumConverter))]
public MyEnum Types { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当Web API控制器发送序列化的Foo对象时,它们可能如下所示:
{
"Type" : "TypeTwo"
}
Run Code Online (Sandbox Code Playgroud)
我的问题:是否可以在每个大写字母之前将序列化枚举作为带空格的字符串发送?这样的解决方案会产生这样的JSON:
{
"Type" : "Type Two"
}
Run Code Online (Sandbox Code Playgroud)
如果有任何其他信息需要解决我的问题,请告诉我.谢谢!
编辑:
如果只将枚举转换为带空格的字符串,同时将它们序列化为JSON,则更为可取.我想MyEnum.ToString()在后端使用时排除空格.
我在 .NET 6 项目中有一个端点Microsoft.NET.Sdk.Web,它使用标准 [FromQuery] 将查询字符串反序列化为 .NET 对象
[Route("[controller]")]
public class SamplesController
: ControllerBase
{
[HttpGet]
public IActionResult Get([FromQuery]QueryModel queryModel)
{
if (!queryModel.Status.HasValue)
{
return BadRequest("Problem in deserialization");
}
return Ok(queryModel.Status.Value.GetEnumDisplayName());
}
}
Run Code Online (Sandbox Code Playgroud)
该模型包含一个枚举
public class QueryModel
{
/// <summary>
/// The foo parameter
/// </summary>
/// <example>bar</example>
public string? Foo { get; init; } = null;
/// <summary>
/// The status
/// </summary>
/// <example>on-hold</example>
public Status? Status { get; set; } = null;
}
Run Code Online (Sandbox Code Playgroud)
枚举具有EnumMember …
enums jsonserializer custom-model-binder asp.net-core system.text.json
我正在尝试显示所有带有status Dispatched. 然而,其唯一返回number value的status,而不是实际的string value。我想这是因为我曾经Enum存储过我的status values?
我希望显示这个词Dispatched而不是number value它在Enum.
我在 ASP.Net MVC 中开发,我query builder在 VS2013 中使用。
我不确定如何解决这个问题,任何人都可以使用 SQL 提出一个易于理解的解决方案。
如果需要任何其他代码,请告诉我,并提前感谢您!
这是我想要的查询,但它不起作用:
SELECT Delivery.[Status],
COUNT(Delivery.DeliveryID) AS Dispatched_Status
FROM Delivery
WHERE Delivery.[Status] = 'Dispatched'
GROUP BY Delivery.[Status];
Run Code Online (Sandbox Code Playgroud)
这是确实有效但返回数字值的查询。我这样尝试是因为 Enum 将字符串值存储为数字:
SELECT Delivery.[Status],
COUNT(Delivery.DeliveryID) AS Dispatched_Status
FROM Delivery
WHERE Delivery.[Status] = '1'
GROUP BY Delivery.[Status];
Run Code Online (Sandbox Code Playgroud)
PS 我知道这status是一个保留字 - 将来会遵循正确的命名约定。
交货表定义
我想知道是否有一种方法可以检查该值是否是枚举的描述。我知道
Enum.IsDefined(typeof(EnumEntity),value)
Run Code Online (Sandbox Code Playgroud)
可以用来检查值是否在枚举中,但是描述怎么样?
例如,
public enum LicenseTypes
{
[Description("A License")]
A,
[Description("B License")]
B,
[Description("C License")]
C
}
Run Code Online (Sandbox Code Playgroud)
有没有办法检查“A License”是枚举 LicenseTypes 的描述?
我有一种枚举类型,其中包含带空格的项目
public enum Enum1
{
[Description("Test1 Enum")]
Test1Enum,
[Description("Test2 Enum")]
Test2Enum,
[Description("Test3Enum")]
Test3Enum,
}
public void TestMethod(string testValue)
{
Enum1 stEnum;
Enum.TryParse(testValue, out stEnum);
switch (stEnum)
{
case ScriptQcConditonEnum.Test1Enum:
Console.Log("Hi");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用 Enum.TryParse(testValue, out stEnum) 时,它总是返回第一个元素。
// Currently stEnum returns Test1Enum which is wrong
Enum.TryParse("Test2 Enum", out stEnum)
Run Code Online (Sandbox Code Playgroud)