小编joe*_*joe的帖子

什么是csproj文件中的"服务包含"?

在C#解决方案中,我添加了一个现有项目.
之后,Visual Studio在其他.csproj文件中添加了以下条目:

<ItemGroup>
    <Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这是用来干嘛的?
我可以删除它吗?

c# csproj visual-studio visual-studio-2013

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

正则表达式可选组

我正在使用这个正则表达式:

((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13})
Run Code Online (Sandbox Code Playgroud)

匹配这样的字符串:

SH_6208069141055_BC000388_20110412101855
Run Code Online (Sandbox Code Playgroud)

分为4组:

SH
6208069141055
BC000388
20110412101855
Run Code Online (Sandbox Code Playgroud)

问题:如何使第一组可选,以便生成的组是空字符串?
在可能的情况下,我想在每种情况下获得4组.

这种情况的输入字符串:(第一组后没有下划线)

6208069141055_BC000388_20110412101855
Run Code Online (Sandbox Code Playgroud)

regex optional regex-group

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

带枚举的Interlocked.CompareExchange

我正在尝试使用Interlocked.CompareExchange这个枚举:

public enum State {
    Idle,
    Running,
    //...
}
Run Code Online (Sandbox Code Playgroud)

以下代码无法编译,但这就是我想要做的:

if (Interlocked.CompareExchange(ref state, State.Running, State.Idle) != State.Idle) {
    throw new InvalidOperationException("Unable to run - not idle");
}
Run Code Online (Sandbox Code Playgroud)

当然我可以使用int而不是枚举并使用属性:

private int state = (int)State.Idle;
public State { get { return (State)state; } }
Run Code Online (Sandbox Code Playgroud)

然后将枚举转换为int:

if (Interlocked.CompareExchange(ref state, (int)State.Running, (int)State.Idle) !=  (int)State.Idle) {
    throw new InvalidOperationException("Unable to run - not idle");
}
Run Code Online (Sandbox Code Playgroud)

但有没有更好的方法来做到这一点?

c# interlocked

17
推荐指数
4
解决办法
2577
查看次数

Windows环境变量名称和值的有效字符是什么?

经过一些研究,我发现名称的长度限制为255,值为32767个字符.

但是哪些字符可以用于名称
哪些字符允许

windows invalid-characters environment-variables special-characters

16
推荐指数
2
解决办法
9047
查看次数

有没有像"用户定义的编码回退"这样的事情

当使用ASCII编码并将字符串编码为字节时,ö会产生类似的字符?.

Encoding encoding = Encoding.GetEncoding("us-ascii");     // or Encoding encoding = Encoding.ASCI;
data = encoding.GetBytes(s);
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来替换不同的字符,而不仅仅是一个问号.
例子:

ä -> ae
ö -> oe
ü -> ue
ß -> ss
Run Code Online (Sandbox Code Playgroud)

如果不能用一个字符替换一个字符,我会接受,如果我甚至可以用一个字符替换它们(ö- > o)

现在有几个实现EncoderFallback,但我不明白它们是如何工作的.
一个快速而肮脏的解决方案是在给出字符串之前替换所有这些字符Encoding.GetBytes(),但这似乎不是"正确"的方式.
我希望我能给出编码对象的替换表.

我怎么能做到这一点?

c# encoding fallback ascii

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

为什么每个人都使用2 ^ n个数字进行分配? - > new StringBuilder(256)

15年前,在使用Pascal进行编程时,我理解为什么要使用2的幂来进行内存分配.但这似乎仍然是最先进的.

C#示例:

new StringBuilder(256);
new byte[1024];
int bufferSize = 1 << 12;
Run Code Online (Sandbox Code Playgroud)

我仍然看到这几千次,我自己用这个,我还在质疑:

我们是否需要现代编程语言和现代硬件?
我猜它是好习惯,但是原因是什么?

编辑
例如一个byte[]数组,如答案所述,2的幂是没有意义的:数组本身将使用16个字节(?),因此使用240(= 256-16)的大小是有意义的总共256个字节?

c# size memory-management

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

SHGetKnownFolderPath/Environment.GetFolderPath()为公共文档返回错误的值

尝试解析CommonDocuments目录时出现了一些奇怪的错误.使用Windows资源管理器(属性 - >上下文菜单中的路径)将CommonDocuments目录重定向/移动到新位置后,它会一直解析到错误的目录.

最小的工作代码是:

namespace CommonDocumentsTest
{
    class Program
    {
        private static readonly Guid CommonDocumentsGuid = new Guid("ED4824AF-DCE4-45A8-81E2-FC7965083634");

        [Flags]
        public enum KnownFolderFlag : uint
        {
            None = 0x0,
            CREATE = 0x8000,
            DONT_VERFIY = 0x4000,
            DONT_UNEXPAND= 0x2000,
            NO_ALIAS = 0x1000,
            INIT = 0x800,
            DEFAULT_PATH = 0x400,
            NOT_PARENT_RELATIVE = 0x200,
            SIMPLE_IDLIST = 0x100,
            ALIAS_ONLY = 0x80000000
        }

        [DllImport("shell32.dll")]
        static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath);

        static void Main(string[] args)
        {
            KnownFolderFlag[] flags …
Run Code Online (Sandbox Code Playgroud)

c# winapi .net-4.0 windows-7 known-folders

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

从SessionID获取Windows用户名

C#中是否有方法从给定的会话ID中检索用户名?
(在系统上运行的任何会话)

Win API函数WTSQuerySessionInformation执行此操作,但我在C#中搜索此函数.

c# windows sessionid username

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

Windows中的特殊文件夹是否有明确的指南?

Windows中的特殊文件夹是否有明确的指南?互联网搜索产生了一些信息,例如

我正在寻找的是每个文件夹的解释,它的预期目的,使用场景和存在的动机(例如,本地应用程序设置为该应用程序设置提供的不是).我认为,对文件夹的需求/使用矩阵/表格会很方便.

windows special-folders known-folders

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

字典项目顺序

我用a Dictionary<string, Item>来存储自己的物品.
使用字典的原因是密钥是唯一的,访问速度很快.

在大多数情况下,我只使用dicionary来访问单个项目.但在一个案例中,我必须遍历字典 - 在这里我需要按顺序添加项目.

我只知道字典在内部使用哈希表,但我不知道它是如何组织的.

问题:
字典中的项目是否已添加?
添加或删除项目时,订单会发生什么变化?

c# dictionary

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