相关疑难解决方法(0)

在C#中将Int转换为Generic Enum

类似于C#中的Cast int to enum,但我的枚举是Generic Type参数.处理这个问题的最佳方法是什么?

例:

private T ConvertEnum<T>(int i) where T : struct, IConvertible
{
    return (T)i;
}
Run Code Online (Sandbox Code Playgroud)

生成编译器错误 Cannot convert type 'int' to 'T'

完整代码如下,其中value可以包含int或null.

private int? TryParseInt(string value)
{
    var i = 0;
    if (!int.TryParse(value, out i))
    {
        return null;
    }
    return i;
}

private T? TryParseEnum<T>(string value) where T : struct, IConvertible
{
    var i = TryParseInt(value);
    if (!i.HasValue)
    {
        return null;
    }

    return (T)i.Value;
}
Run Code Online (Sandbox Code Playgroud)

c# generics enums casting

74
推荐指数
5
解决办法
3万
查看次数

如何将泛型枚举转换为int?

我有一个小方法,看起来像这样:

public void SetOptions<T>() where T : Enum
{
    int i = 0;
    foreach (T obj in Enum.GetValues(typeof(T)))
    {
        if (i == 0)
            DefaultOption = new ListItem(obj.Description(), obj.ToString());
        i++;
        DropDownList.Items.Add(new ListItem(obj.Description(), obj.ToString()));
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,我从枚举中填充下拉列表.Description()实际上是枚举的扩展方法,所以T绝对是一个enum.

但是,我想像obj你这样对任何枚举进行(int)obj转换,但是我得到一个错误,说我无法将T转换为int.有没有办法做到这一点?

c# enums

44
推荐指数
6
解决办法
2万
查看次数

如何在 .NET Standard 中为通用枚举类型设置枚举标志?

我想使用 .NET Standard 实现以下方法:

public static void SetFlag<TEnum>(ref TEnum value, TEnum flag)
    where TEnum : Enum
Run Code Online (Sandbox Code Playgroud)

我花了几个小时试图实现这一目标:

  • |对于像 s 这样的基本类型来说,通过反射获取运算符似乎是不可能的enum
  • 使用dynamic需要引用额外的包 ( Microsoft.CSharp.RuntimeBinder),但我希望我的库保持纯粹的 .NET 标准符合。

我最新的想法是手动比较 TEnum每个有效的枚举类型{byte , sbyte, short, ushort, int, uint, long, ulong}。但这感觉真的很奇怪而且肮脏:

try
{
    var v = (byte)(object)value | (byte)(object)flag;
    value = (TEnum)(object)v;
    return;
}
catch (InvalidCastException) { }

try
{
    var v = (int)(object)value | (int)(object)flag; …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection enums .net-standard

4
推荐指数
1
解决办法
1012
查看次数

标签 统计

c# ×3

enums ×3

.net ×1

.net-standard ×1

casting ×1

generics ×1

reflection ×1