相关疑难解决方法(0)

C#中的C位字段

我需要将C结构转换为使用位字段的C#.

typedef struct foo  
{  
    unsigned int bar1 : 1;
    unsigned int bar2 : 2;
    unsigned int bar3 : 3;
    unsigned int bar4 : 4;
    unsigned int bar5 : 5;
    unsigned int bar6 : 6;
    unsigned int bar7 : 7;
    ...
    unsigned int bar32 : 32;
} foo;
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做吗?

c c# bit-manipulation code-conversion

10
推荐指数
2
解决办法
6907
查看次数

将枚举值与位标志结合起来

我有这种情况,用户有自己的角色

普通用户
托管
金融

托管人和财务部都是超级用户

如何检查角色托管人是否是超级用户

这是我的示例代码..

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    public enum Role
    {
        NormalUser = 0,
        Custodian = 1,
        Finance = 2,
        SuperUser = Custodian | Finance,
        All = Custodian | Finance | NormalUser
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Normal: " + Convert.ToInt32(Role.NormalUser));            
            Console.WriteLine("Custodian: " + Convert.ToInt32(Role.Custodian));
            Console.WriteLine("Finance: " + Convert.ToInt32(Role.Finance));            
            Console.WriteLine("SuperUser: " + Convert.ToInt32(Role.SuperUser));
            Console.WriteLine("All: " + Convert.ToInt32(Role.All));

            Console.WriteLine();
            Console.WriteLine("Normal User is …
Run Code Online (Sandbox Code Playgroud)

c#

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

存储用户设置 - 使用"Flags"或"Bits"而不是一堆bool有什么问题?

我正在设计我的MVC应用程序的用户设置,现在我有~20个布尔设置,用户可以切换.由于每个用户总是会进行所有设置,因此我考虑将每个设置存储为User表中的布尔值.虽然随着应用程序需求的增长,这将变得难以处理.

第一个问题 - 在这种情况下,你的桌子上有大量的柱子有什么问题吗?

然后我考虑使用Flags,并将设置存储为数组中的每一位:

[Flags]
public enum Settings
{
    WantsEmail = 1,
    WantsNotifications = 2,
    SharesProfile = 4,
    EatsLasagna = 8
}
Run Code Online (Sandbox Code Playgroud)

然后每个用户在其用户行中将有一个"设置"列,如果有20个设置,则存储值为2 ^ 20.

我用这个来指导我的努力:[Flags] Enum属性在C#中意味着什么?

这比前一种做法好吗?欢迎任何建议.

c# asp.net asp.net-mvc database-design database-schema

10
推荐指数
1
解决办法
1026
查看次数

C#,模式 - 许多条件

我正在为我的问题寻找一个好的模式.

我有一些bool变量:

condition1,condition2,condition3.

我也有一些动作,在课堂内的不同地方调用:

动作1,动作2,ACTION3

当条件1和2为真时,调用Action1.当条件2和3为真时,将调用action2.当所有条件都为真时,将调用操作3.

当然,这只是问题的简化.我不想在每个地方使用if else.这非常不清楚.

我一直在考虑状态,但我想这不是解决这个问题的最佳方法.

c# design-patterns pattern-matching conditional-statements

10
推荐指数
1
解决办法
1567
查看次数

C#:检查一组枚举值的最佳方法是什么?

假设你有 enum MyEnum {A = 0, B = 1, C = 2, D = 4, E = 8, F = 16};

在某些时候,您有一个函数将检查MyEnum的实例,如果它是C,D或F则返回true

bool IsCDF(MyEnum enumValue) 
{
  return //something slick
}
Run Code Online (Sandbox Code Playgroud)

我记得有一些非常光滑的方法来进行位移和预先形成这种操作,比一堆三元if语句读取方式更好但是对于我的生活我不记得它是什么.

谁知道?

c# math enums

9
推荐指数
3
解决办法
1万
查看次数

试图将标志枚举解析为字符串

我有一个类"许可证",它是一堆枚举标志的集合,如下所示:

Public class License
{
    UsageType Usage { get; set; }
    PlatformType Platform { get; set; }

    public enum UsageType { read = 1, write = 2, wipe = 4, all = 7 }
    public enum PlatformType { windows = 1, linux = 2, ios = 4, all = 7 }

    etc...
}
Run Code Online (Sandbox Code Playgroud)

关键是可以将相同类别的各种标志一起进行"或"运算,以形成用户可以对所述许可证执行的操作的配置文件.现在我试图以人性化的方式显示"Usage"和"Platform"的值,例如,如果Usage == UsageType.read | UsageType.write然后它应该被解析为"读,写".

我通过测试每个标志的值并为每个标志附加enumitem.ToString()为一个字符串来成功地使用单个枚举类型.既然我有很多这些枚举和价值,我想提出一个更通用的方法.

我提出了这个(下面),但由于我不熟悉c#中的模板函数所以我不知道为什么这不起作用,但至少它应该说明我的意思:

private string parseEnum<T>(T value)
{
    string ret = "";
    foreach (var ei in (T[])Enum.GetValues(typeof(T)))
    {
        if (value.HasFlag(ei)) ret += ei.ToString() …
Run Code Online (Sandbox Code Playgroud)

c# generics enums parsing

9
推荐指数
1
解决办法
1万
查看次数

为什么[Flag]'枚举从0开始并递增1?

编辑:似乎大多数人误解了我的问题.

我知道枚举是如何运作的,我知道二进制.我想知道为什么带有[Flags]属性的枚举是按原样设计的.

原帖:

这可能是重复的,但我没有找到任何其他帖子,所以这里.

我打赌它背后有一些很好的理由,我发现它有点容易出错.

[Flag]
public enum Flagged
{
  One, // 0
  Two, // 1
  Three, // 2
  Four, // 3
}

Flagged f; // Defaults to Flagged.One = 0
f = Flagged.Four;
(f & Flagged.One) != 0; // Sure.. One defaults to 0
(f & Flagged.Two) != 0; // 3 & 1 == 1
(f & Flagged.Three) != 0; // 3 & 2 == 2
Run Code Online (Sandbox Code Playgroud)

如果做到这样的话会不会更有意义?

[Flag]
public enum Flagged
{
  One = 1 << 0, …
Run Code Online (Sandbox Code Playgroud)

c# enums bitflags

8
推荐指数
3
解决办法
2738
查看次数

是否需要flags属性?

我发现有或没有flags属性,如果我定义了以下枚举,我可以做位操作

enum TestType
{
    None = 0x0,
    Type1 = 0x1,
    Type2 = 0x2
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我们需要flags属性?

.net c#

8
推荐指数
1
解决办法
306
查看次数

为什么使用FlagsAttribute定义EntityState枚举

我正在为我们的应用程序做一个简单的实体更改日志记录.出现的一个问题是,虽然DbEntityEntry.State属性的枚举值明显是互斥的(参见MSDN),但它是使用Flags属性定义的,并且选择的值就好像它们可以组合一样.

假设这些值互相排斥是否安全?他们为什么选择这条道路?

.net c# entity-framework

7
推荐指数
1
解决办法
354
查看次数

如何将枚举与标志组合?

我有一个带标志的枚举.我想声明一个带有n不同标志的变量.n > 1在这种情况下.

public enum BiomeType {
    Warm = 1,
    Hot = 2,
    Cold = 4,
    Intermediate = 8,

    Dry = 16,
    Moist = 32,
    Wet = 64,
}
Run Code Online (Sandbox Code Playgroud)

好的 - 一个变体是将每个标志转换为一个字节并将结果转换为我的枚举.

BiomeType bType = (BiomeType)((byte)BiomeType.Hot + (byte)BiomeType.Dry)
Run Code Online (Sandbox Code Playgroud)

但这有点混乱 - imho.是否有更可读的方式来组合标志?

c# enums

6
推荐指数
1
解决办法
276
查看次数