小编Dan*_*den的帖子

如何为枚举char(1)数据库字段实现C#枚举?

好的,所以我有一个char(1)类型的数据库字段,它有少量可能的状态代码(例如'F'= Failure,'U'= Unknown等).我想要一个与这些状态相对应的C#enum类.我可以:

public enum StatusCode : byte {
    Unknown = (byte) 'U',
    Failure = (byte) 'F',
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是在从数据库返回的DataTable中,列值是System.Data.SqlTypes.SqlString实例.显然有一些问题从C#字符串(甚至是C#字符)转换为C#字节(因为C#char实际上是UTF-16代码点).但在这种情况下,我知道值被约束为一个小集合,如果此集合之外的值通过,代码应抛出异常.

考虑到这一点,最好的方法是什么?从SqlString转换为字节是否安全?Convert.ToByte()会更好吗?简单地使用开关/案例构造将值交叉到枚举中会更好吗?

我正在寻找"最好"的方法,不仅在获得正确的结果方面,而且在代码清晰度方面.我想我也可以使用一些常量

public const char UnknownStatus = 'U';
public const char FailureStatus = 'F';
Run Code Online (Sandbox Code Playgroud)

但如果可能的话,我宁愿使用枚举.有什么想法吗?

编辑:为了澄清我想要做什么,我希望在我的代码中经常使用这些值.例如,我希望能够做到这样的事情:

public void DoSomething(StatusCode currentStatus) {
    if(currentStatus == StatusCode.Failure) {
        throw new SomeException();
    }

    switch(currentStatus) {
        case StatusCode.Unknown:
            // do something
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

等等.我特别想避免这样的事情:

public void DoSomething(char currentStatus) {
    if(currentStatus == 'F') {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下,我正在使用相当于"神奇数字"的地方.特别是,这将使迁移到其他一些状态标记系统几乎是不可能的.那有意义吗?

c# byte ascii

5
推荐指数
1
解决办法
5314
查看次数

如何在替换原子文件时保留所有权和权限?

因此,正常的POSIX方式安全地,原子地替换文件的内容是:

  • fopen(3) 同一卷上的临时文件
  • fwrite(3) 临时文件的新内容
  • fflush(3)/ fsync(2)确保将内容写入磁盘
  • fclose(3) 临时文件
  • rename(2) 用于替换目标文件的临时文件

但是,在我的Linux系统(Ubuntu 16.04 LTS)上,此过程的一个后果是目标文件的所有权和权限更改为临时文件的所有权和权限,默认为uid/ gid和当前umask.

我想我会stat(2)在覆盖之前将代码添加到目标文件中,并且在调用之前将fchown(2)//fchmod(2)临时文件添加到目标文件中rename,但是由于这个原因可能会失败EPERM.

是唯一的解决方案,以确保文件的uid/ gid匹配当前用户和进程组覆盖文件?在这种情况下是否有一种安全的方法可以退回,还是我们必然会失去原子保证?

c posix chmod file-rename chown

5
推荐指数
2
解决办法
261
查看次数

读取文本文件时如何修复这个 cp950“非法多字节序列”UnicodeDecodeError?

我的老师教我们如何使用“exec”,但我得到了一个错误:

UnicodeDecodeError: 'cp950' codec can't decode byte 0xe6 in position 1814: illegal multibyte sequence
Run Code Online (Sandbox Code Playgroud)

我用:

exec(open("somefile.py").read())
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

python python-3.x

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

是否应将某些GPL代码翻译成其他语言作为GPL许可?

是否应将某些GPL代码翻译成其他语言作为GPL许可?

例如,我们有x264 C/C++ H264编码开源GPL库.如果我们将代码作为GPL许可,我们将它从... C\C++翻译成Java或C#?

licensing gpl

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

为什么此代码使用JavaScript的.aspx文件?

我找到了一些我不确定完全理解的旧代码.以下是仅包含JavaScript的.aspx页面:

<%@ Page Language="C#" EnableSessionState="True" CodePage="65001" uiculture="auto" %>

<%
Response.ContentType = "text/plain";
%>


var csBackgroundColor;

function testfx() {
    csBackgroundColor.setAttribute('disabled', 'disabled');
}
Run Code Online (Sandbox Code Playgroud)

它被引用如下:

<script type="text/javascript" src="filename.js.aspx"></script>
Run Code Online (Sandbox Code Playgroud)

我想知道为什么它不仅仅被标记为完全是一个JavaScript文件?是这样做的,所以你可以包括代码块?使用这种方式的文件,我甚至没有获得IntelliSense.

javascript asp.net

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

为什么if语句成功?

下面的if语句成功,并且输出s的值。但是,如果删除:和/或空格条件,则它将失败。我对为什么它首先成功感到困惑。

    s="( )"
    if ("if" and ":" and " ") in s:
        print(s)
Run Code Online (Sandbox Code Playgroud)

python

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

什么是以.sd扩展名结尾的网站?

我知道有:

  • 的.aspx
  • .PHP
  • html的
  • 热媒

这是我第一次在最后看到一个带有.sd的网站.究竟是什么意思,是否有一个维基解释了更多?

例如,本网站:http: //www.racingpost.com/horses2/results/home.sd

我第一次看到它,我只是好奇.

url

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

SQLite中标量SQL函数和聚合SQL函数之间的区别

SQLite中标量SQL函数和聚合SQL函数之间的确切区别是什么?

尝试在SQLite中创建新函数时,我遇到以下代码问题:

 int sqlite3_create_function(
     sqlite3 *db,
     const char *zFunctionName,
     int nArg,
     int eTextRep,
     void *pApp,
     void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
     void (*xStep)(sqlite3_context*,int,sqlite3_value**),
     void (*xFinal)(sqlite3_context*)
 );
Run Code Online (Sandbox Code Playgroud)

对于标量SQL函数,xStepxFinal必须为null,对于聚合SQL函数,xFunc必须为null.我需要知道使用哪一个以及有什么区别.

c++ sqlite

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

array[++variable] 代表什么?

示例代码在这里:

static class stack 
{
    int top=-1;
    char items[] = new char[100];

    void push(char x) 
    {
        if (top == 99)
            System.out.println("Stack full");
        else
            items[++top] = x;
    }
}
Run Code Online (Sandbox Code Playgroud)

当 items[++top] 出现时到底发生了什么?

java arrays iteration

0
推荐指数
1
解决办法
1089
查看次数

标签 统计

python ×2

arrays ×1

ascii ×1

asp.net ×1

byte ×1

c ×1

c# ×1

c++ ×1

chmod ×1

chown ×1

file-rename ×1

gpl ×1

iteration ×1

java ×1

javascript ×1

licensing ×1

posix ×1

python-3.x ×1

sqlite ×1

url ×1