小编Mic*_*eyn的帖子

将颜色定义为静态资源

我希望能够做到以下几点:

...
<Grid>
  <Grid.Resources>
    <Color x:Key="MyColor">#FFEEDD</Color>
    <Color x:Key="MyOtherColor">Green</Color>
    <!-- Use MyColor and MyOtherColor to define other resources... -->
  </Grid.Resources>
</Grid>
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不得不这样做:

...
<Grid>
  <Grid.Resources>
    <Color x:Key="MyColor" A="255" R="255" G="238" B="221" />
    <Color x:Key="MyOtherColor" A="255" R="0" G="128" B="0" />
    <!-- Use MyColor and MyOtherColor to define other resources... -->
  </Grid.Resources>
</Grid>
Run Code Online (Sandbox Code Playgroud)

因为,似乎价值转换器没有踢.这是臀部的皇家痛苦,我想知道我能做什么,以便我可以象征性地和十六进制值定义我的颜色?

c# wpf wpf-4.0 c#-4.0

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

这个压缩算法有名称吗?

假设您有一个四字节整数,并且希望将其压缩为更少的字节.您可以压缩它,因为较小的值比较大的值更可能(即,值的概率随其大小而减小).您应用以下方案,以产生1,2,3或4字节结果:

注意,在下面的描述中(位是从1开始的,从最高有效位到最低有效位),即第一位指的是最高有效位,第二位指的是下一个最高位,等等......)

  1. 如果n <128,则将其编码为单个字节,并将第一个位设置为零
  2. 如果n> = 128且n <16,384,则使用两个字节的整数.将第一位设置为1,将第二位设置为零.然后使用剩余的14位对数字n进行编码.
  3. 如果n> 16,384且n <2,097,152,则使用三字节整数.将第一位设置为1,将第二位设置为1,将第三位设置为零.您使用剩余的21位来编码n.
  4. 如果n> 2,097,152且n <268,435,456,则使用四字节整数.将前三位设置为1,将第四位设置为零.您使用剩余的28位来编码n.
  5. 如果n> = 268,435,456且n <4,294,967,296,则使用五字节整数.将前四位设置为1并使用以下32位将n的精确值设置为四字节整数.其余位未使用.

这个算法有名字吗?

compression

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

T-SQL是否可以通过单个快速操作执行更新/插入

假设我有一张桌子,我想插入一行.新行的键可能已经匹配表中现有行的键,在这种情况下,我想更新现有行.或者,它可能不存在于表中,在这种情况下应插入新行.

执行此类操作的最有效方法是什么?我在考虑先做一个SELECT(或许有EXISTS)看一个特定的密钥是否存在,然后是UPDATEif present和INSERTif if not.为了避免竞争条件,你可能需要为这个语句组合保留a UPDLOCK和a HOLDLOCK.这似乎过于复杂和低效.

我想知道在SQL Server 2008R2中是否有更有效的方法来执行此操作.

t-sql sql-server-2008 sql-server-2008-r2

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

如何将lambda插入Linq声明性查询表达式中

假设您有以下代码:

  string encoded="9,8,5,4,9";

  // Parse the encoded string into a collection of numbers
  var nums=from string s in encoded.Split(',')
           select int.Parse(s);
Run Code Online (Sandbox Code Playgroud)

这很简单,但是如果我想在select中将一个lambda表达式应用于s,但仍然将其保留为声明性查询表达式,换句话说:

  string encoded="9,8,5,4,9";

  // Parse the encoded string into a collection of numbers
  var nums=from string s in encoded.Split(',')
           select (s => {/* do something more complex with s and return an int */});
Run Code Online (Sandbox Code Playgroud)

这当然不能编译.但是,如何在不将其转换为流利语法的情况下获得lambda.

更新:感谢StriplingWarrior的指导,我有一个令人费解但可编译的解决方案:

var result=from string s in test.Split(',')
           select ((Func<int>) 
             (() => {string u="1"+s+"2"; return int.Parse(u);}))();
Run Code Online (Sandbox Code Playgroud)

关键在于转换为a,Func<string,int>然后为select的每次迭代评估lambda (s).任何人都可以提出任何更简单的东西(即,没有强制转换为Func,然后进行评估,或者可能是在保持查询表达式语法的同时实现相同最终结果的不那么冗长的东西)?

注意:上面的lambda内容本质上是微不足道的.请不要改变它.

更新2:是的,这是我,疯狂迈克,回到另一个(更漂亮的?)解决方案: …

.net c# linq visual-studio-2010 c#-4.0

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

在C#/ VS2010中单步执行.NET 4.0源代码时无法看到params

当我进入.NET源代码(在调试选项中启用了.NET源步进并且禁用了我的代码)时,出于某种原因,在VS2010的Autos和Watch窗口中,我无法在.NET框架函数中查看参数.手表或汽车窗格.但是我可以看到局部变量.为什么是这样?

更新:这是一个没有优化的调试64位(x64)版本.没有错误,我只是不能在以下函数中"观察"参数:

// Enumerable.cs

public class Lookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>, ILookup<TKey, TElement>{
...
    internal static Lookup<TKey, TElement> Create<TSource>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer) {
Run Code Online (Sandbox Code Playgroud)

更新2:默认情况下,似乎只安装了.NET 4.0框架的发布版本.你仍然可以进入它,但你可能看不到一些函数参数和局部变量(并在某些行上设置断点).我想我真的想要使用.NET 4.0框架的Debug构建,这样我就可以看到所有的params,locals并在所有行上放置断点.如果我已经安装了VS2010 Premium,我该如何安装呢?

visual-studio-2010 c#-4.0

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

新窗格已添加到错误的选项卡组

出于某种原因,每当我通过右键单击"解决方案资源管理器"窗格中的项目并选择"添加类"或"添加新项"(这是一个类)来创建新类时,编辑该类代码的窗格将共享选项卡组.解决方案资源管理器,而不是我已打开的其他代码窗口的选项卡组.一张图片胜过千言万语,所以看看这个例子:

替代文字

我刚刚将Menu2.cs添加到我的项目中,它在Solution Explorer的选项卡组中打开,而不是右侧选项卡组,其中打开了其他(代码/文本)文件.

更新:显然它比我想象的要糟糕.如果我双击项目中当前未打开的任何源文件,它也会(错误地)在"解决方案资源管理器"选项卡组中打开.

更新2 :(解决方案)解决方案资源管理器向左边缘解除锁定并重新锁定解决方案资源管理器解决了问题.您必须选择最左侧(或最右侧)图像而不是左侧/右侧图像,以避免此问题:

替代文字

很抱歉截止图像,但这是我能做的最好的屏幕捕获图标窗格定位的淡入淡出.

c# visual-studio-2010

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

有没有更简单的方法在现代Linux上的不相关进程之间共享文件描述符(即ver> = 3.0.0)?

Linux是否提供了一种更好的方法将fd从一个进程发送到另一个进程进行共享,而不是使用sendmsg()系统调用SCM_RIGHTS通过UNIX Domain套接字发送它(类型设置为的消息)?我想最好的可能性是以某种方式能够命名一个fd,然后在一个不相关的过程中打开它(按名称),但我愿意接受其他选择.

我问这个问题的原因是能够使用*FD()函数(例如eventfd(),timerfd(),signalfd()进程间,等...),没有父子关系,使其更加难以共享文件描述符.

linux system-calls linux-kernel

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

为什么此代码中没有缩小转换,导致错误?

g++-std=c++11似乎接受它:

#include <vector>
#include <initializer_list>

std::vector<float> vf={1,2,3}; // Isn't this narrowing (i.e., an error)?

int main() {}
Run Code Online (Sandbox Code Playgroud)

似乎带注释的行应该出错,但事实并非如此.

更新

感谢Jesse指向标准(8.5.4 p7),该标准定义了为什么这样做.以下是一些示例代码,有助于阐明标准定义的行为:

const int v5=5;
int v6=6;

vector<double> vd1={1,2,3,4};       // OK
vector<double> vd2={1,2,3,4,v5};    // Still OK, v5 is const
vector<double> vd3={1,2,3,4,v5,v6}; // Error, narrowing conversion, because v6 
                                    // is non-const
vector<double> vd4={1,2,3,4,v5,static_cast<const int>(v6)}; // Also errors on 
                                    // gcc 4.7.2, not sure why.
Run Code Online (Sandbox Code Playgroud)

我希望我刚才介绍的例子可以帮助其他人在使用初始化列表时解决一些缩小的问题.

如果有人知道为什么最后一个案例违反了标准定义,请发表评论.

c++ c++11

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

在C++ 11增强之后deque vs向量指导

回到C++之前的11天,许多书籍作者建议在需要deque随机访问的动态大小容器的情况下使用.这部分是由于deque移动多功能数据结构的事实vector,但也是因为vector在C++之前的11世界中没有提供通过"缩小到"来缩小其容量的便捷方式.适合." 更大deque的间接访问通过支架操作元素和迭代的开销似乎受到了较大被包含vector再分配的开销.

另一方面,有些事情没有改变.vector仍然使用几何(即,尺寸*因子)方案进行重新分配,并且stil必须将其所有元素复制(或移动,如果可能)到新分配的空间中.vector关于在前部和/或中部插入/移除元件,它仍然是相同的.另一方面,它提供了更好的引用局部性,尽管如果使用的块deque是"良好的大"大小,那么对于许多应用程序来说,可以为缓存带来好处.

所以,我的问题是,如果根据C++ 11带来的变化,deque应继续保持转向/首选容器的动态大小/随机访问需求.

c++ c++11

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

在 Windows 上解析 UTF-8 命令行参数时出现这个奇怪问题的原因是什么?

我正在尝试传入一个使用 UNICODE 字符的字符串:"right single quotation mark" Decimal: 8217 Hex: \\x{2019}

\n

Perl 未正确接收字符。让我向您展示详细信息:

\n

Perl 脚本如下(我们称之为test.pl):

\n
use warnings;\nuse strict;\nuse v5.32;\nuse utf8; # Some UTF-8 chars are present in the code\'s comments\n\n# Get the first argument\nmy $arg=shift @ARGV or die \'This script requires one argument\';\n\n# Get some env vars with sensible defaults if absent\nmy $lc_all=$ENV{LC_ALL} // \'{unset}\';\nmy $lc_ctype=$ENV{LC_CTYPE} // \'{unset}\';\nmy $lang=$ENV{LANG} // \'{unset}\';\n\n# Determine the current Windows code page\nmy ($active_codepage)=`chcp 2>NUL`=~/: (\\d+)/;\n\n# Our environment\nsay "ENV: LC_ALL=$lc_all LC_CTYPE=$lc_ctype …
Run Code Online (Sandbox Code Playgroud)

windows perl utf-8

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