相关疑难解决方法(0)

何时使用枚举,何时用静态成员替换它们?

最近发生了以下(样本)枚举......

enum Color
{
    Red,
    Green,
    Yellow,
    Blue
}
Run Code Online (Sandbox Code Playgroud)

......可以用看似更加类型安全的类替换:

class Color
{
    private Color() { }

    public static readonly Color   Red      = new Color();
    public static readonly Color   Green    = new Color();
    public static readonly Color   Yellow   = new Color();
    public static readonly Color   Blue     = new Color();
}
Run Code Online (Sandbox Code Playgroud)

对于"类型安全",我的意思是如果Color是枚举,则以下语句将起作用,但如果Color是上述类则不行:

var nonsenseColor = (Color)17;    // works if Color is an enum
Run Code Online (Sandbox Code Playgroud)

两个问题:

1)这种模式是否有广泛接受的名称(用类型安全类替换枚举)?

2)在哪种情况下应该使用枚举,什么时候更合适?

c# polymorphism enums static-members

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

何时在C#中使用Shift运算符<< >>?

我正在研究C#中的移位运算符,试图找出何时在我的代码中使用它们.

我找到了答案,但对于Java,你可以:

a)进行更快的整数乘法和除法运算:

*4839534*4*可以这样做: 4839534 << 2

要么

543894/2可以这样做:543894 >> 1

对于大多数处理器,移位操作比乘法更快.

b)将字节流重组为int值

c)用于加速图形操作,因为红色,绿色和蓝色由单独的字节编码.

d)将小数字装入一个长的...


对于b,c和d,我无法想象这里是一个真实的样本.

有谁知道我们是否可以在C#中完成所有这些项目?C#中的移位运算符是否有更实用的用途?

c# operators bit-shift

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

为什么BitVector 32结构比BitArray更有效?

BitArray和BitVector 32结构有什么区别,BitVector 32结构比BitArray有什么优势?为什么BitVector 32结构比BitArray更有效?

提前致谢.

周杰伦...

c# collections bitvector

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

基于字节长度缩短UTF8字符串的最佳方法

最近的一个项目要求将数据导入Oracle数据库.执行此操作的程序是C#.Net 3.5应用程序,我正在使用Oracle.DataAccess连接库来处理实际插入.

我遇到了一个问题,我在插入特定字段时收到此错误消息:

ORA-12899对于X列而言值太大

我用过Field.Substring(0, MaxLength);但仍然得到错误(虽然不是每个记录).

最后我看到了应该是显而易见的,我的字符串是ANSI,字段是UTF8.它的长度以字节为单位,而不是字符.

这让我想到了我的问题.修剪字符串以修复MaxLength的最佳方法是什么?

我的子字符串代码按字符长度工作.是否有简单的C#函数可以按字节长度智能地修剪UT8字符串(即不会破坏半个字符)?

c# oracle utf-8 ora-12899

14
推荐指数
4
解决办法
8597
查看次数

C#与管道和符号传递多个枚举值之间的差异

C#接受这个:

this.MyMethod(enum.Value1 | enum.Value2);
Run Code Online (Sandbox Code Playgroud)

还有这个:

this.MyMethod(enum.Value1 & enum.Value2);
Run Code Online (Sandbox Code Playgroud)

有什么不同?

.net c# parameters enums parameter-passing

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

详尽切换的编译器错误

为什么我在下面的代码中得到" 并非所有代码路径返回值 " VeryBoolToBool()

public enum VeryBool { VeryTrue, VeryFalse };
public bool VeryBoolToBool(VeryBool veryBool)
{
    switch(veryBool)
    {
        case VeryBool.VeryTrue:
            return true;

        case VeryBool.VeryFalse:
            return false;

        // Un-commenting the unreachable(?) default clause will solve this
        // default:
        //    throw new HowTheHellDidIGetHereException();
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器不能看到没有其他选项VeryBool吗?

c# enums switch-statement

13
推荐指数
1
解决办法
1224
查看次数

如何将int转换为位掩码?

有没有办法将int转换为位掩码?

例:

int i = 33;
Run Code Online (Sandbox Code Playgroud)

应转换为(不确定数据类型)

bool[] bitmask = new[] {true, false, false, false, false, true};
Run Code Online (Sandbox Code Playgroud)

更新
对大多数答案的反应:

我需要这样做:

BitArray bits = new BitArray(BitConverter.GetBytes(showGroup.Value));
List<String> showStrings = new List<string>();
for (int i = 0; i < bits.Length; i++)
{
    if(bits[i])
        showStrings.Add((i+1).ToString().PadLeft(2, '0'));
}
Run Code Online (Sandbox Code Playgroud)

如果不将其转换为比特阵列,情况会怎样?

.net c#

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

有没有办法在 String.Split() 中使用多个 StringSplitOptions ?

我想用分隔符“;”分割字符串 并应用StringSplitOptions.TrimEntriesStringSplitOptions.RemoveEmptyEntries。我尝试使用 StringSplitOptions 数组,例如

// myString already defined elsewhere    
StringSplitOptions[] options = { StringSplitOptions.TrimEntries, StringSplitOptions.RemoveEmptyEntries };
string[] strs = myString.Split(';', options);
Run Code Online (Sandbox Code Playgroud)

但这不能编译。我知道我可以稍后使用 Trim() 删除空格,但更喜欢干净的单语句解决方案,并且似乎您应该能够使用多个(两个)选项。在StringSplitOptions enum的页面中,它提到

如果同时指定RemoveEmptyEntries 和TrimEntries,则仅由空白字符组成的子字符串也会从结果中删除。

页面的其余部分和 String.Split() 方法的页面都没有给出任何有关如何它们一起指定的指示。

我可能会错过一些简单的东西,因为我对 C# 相当陌生并且是自学的。如果这篇文章的格式不好或者是重复的问题,请原谅,这是 Stack Overflow 上的第一篇文章。我尝试搜索这个问题,但没有看到任何结果。预先感谢您可以提供任何指导?

.net c#

12
推荐指数
1
解决办法
4746
查看次数

更改ComboBox突出显示的颜色

我试图ComboBox在C#Windows Forms应用程序的下拉列表中改变突出显示的颜色.我在整个网页上搜索了一个答案,到目前为止我找到的最佳选项是在绘制所选项目时绘制所需颜色的矩形.

Class Search
{
    Public Search()
    {
    }

    private void addFilter()
    {
        ComboBox field = new ComboBox();

        field.Items.AddRange(new string[] { "Item1", "item2" });
        field.Text = "Item1";
        field.DropDownStyle = ComboBoxStyle.DropDownList;
        field.FlatStyle = FlatStyle.Flat;
        field.BackColor = Color.FromArgb(235, 235, 235);
        field.DrawMode = DrawMode.OwnerDrawFixed;
        field.DrawItem += field_DrawItem;
    }

    private void field_DrawItem(object sender, DrawItemEventArgs e)
    {
        if (e.Index >= 0)
        {
            ComboBox combo = sender as ComboBox;

            if (e.Index == combo.SelectedIndex)
                e.Graphics.FillRectangle(new SolidBrush(Color.Gray),
                                         e.Bounds
                                        );
            else
                e.Graphics.FillRectangle(new SolidBrush(combo.BackColor),
                                         e.Bounds
                                        ); …
Run Code Online (Sandbox Code Playgroud)

c# combobox highlighting winforms

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

如何使用Entity Framework设计可配置的字段级权限

假设我们有一个关于某些型号汽车的信息表,例如: 在此输入图像描述

如果我还需要用户可配置的规则,我如何才能最好地实现读写操作的字段级访问权限?我正在使用MSSQL Server 2016和EF 6.

根据该表,我们可能会有以下用例,用于描述某个角色或组可见的字段:

1)公共数据的默认权限组

在此输入图像描述

2)基于实体的权限组

在此输入图像描述

3)基于自定义字段的权限组

在此输入图像描述

要求是,隐藏数据必须与NULL值不同,规则/权限必须是用户可配置的.我还需要对列表进行分页,这需要对可见数据进行正确排序.为此,我需要一种处理数据类型的方法.例如,建设年度为一个非空的日期时间,然而,当该场是不可见的,它需要被设置为像DateTime.MinValue默认值.处理位(布尔值)时,这变得更具挑战性:-)

我目前正在考虑与任何一个表值函数的方法,这似乎是动态地实现对我的情况下,或保存数据,这是我需要保持同步与数据库的全部单独的缓存层更难.

c# sql-server permissions entity-framework

11
推荐指数
1
解决办法
1315
查看次数