小编Abe*_*bel的帖子

C#null-coalescing(??)运算符的运算符优先级是什么?

我刚试过以下内容,想法是连接两个字符串,用空字符串替换空值.

string a="Hello";
string b=" World";
Run Code Online (Sandbox Code Playgroud)

- 调试(有趣的是?是打印,并不完全有助于提高可读性......)

 ? a ?? "" + b ?? "" 
Run Code Online (Sandbox Code Playgroud)

- >"你好"

正确的是:

? (a??"")+(b??"")
"Hello World"
Run Code Online (Sandbox Code Playgroud)

我有点期待"Hello World",或者只是"世界",如果a为null.显然这是运算符优先级的todo,可以通过括号来克服,是否存在记录此新运算符的优先顺序的任何位置.

(意识到我应该使用stringbuilder或String.Concat)

谢谢.

c# null null-coalescing-operator

19
推荐指数
3
解决办法
5493
查看次数

您如何从.NET字符串中获取一系列Unicode代码点?

我有一个字符范围限制列表,我需要检查字符串,但char.NET中的类型是UTF-16,因此一些字符变为古怪(代理)对.因此,当枚举a中的所有char's时string,我没有获得32位Unicode代码点,并且某些与高值的比较失败.

我非常了解Unicode,如果有必要,我可以自己解析字节,但我正在寻找一个C#/ .NET Framework BCL解决方案.所以......

如何将a转换为32位Unicode代码点string的数组(int[])?

c# string unicode char astral-plane

19
推荐指数
2
解决办法
3992
查看次数

fb:喜欢盒子,自定义css?

是否可以将自定义css文件添加到fb:like-box?例如,我想删除iframe周围的边框.谢谢

html api facebook facebook-likebox

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

Interlocked.CompareExchange是否使用内存屏障?

我正在阅读Joe Duffy关于Volatile读取和写入以及及时性的帖子,我正在尝试理解帖子中最后一个代码示例:

while (Interlocked.CompareExchange(ref m_state, 1, 0) != 0) ;
m_state = 0;
while (Interlocked.CompareExchange(ref m_state, 1, 0) != 0) ;
m_state = 0;
… 
Run Code Online (Sandbox Code Playgroud)

当执行第二CMPXCHG操作,它使用一个内存屏障,以保证价值m_state确实写入的最新值?或者它只是使用已存储在处理器缓存中的某些值?(假设m_state未声明为volatile).
如果我理解正确,如果CMPXCHG不会使用内存屏障,那么整个锁获取过程将不公平,因为第一个获取锁的线程很可能是将获得所有锁的线程.以下锁.我是否理解正确,或者我错过了什么?

编辑:主要问题实际上,在尝试读取m_state的值之前,调用CompareExchange是否会导致内存屏障.因此,当尝试再次调用CompareExchange时,是否所有线程都可以看到赋值0.

c# optimization multithreading volatile memory-model

18
推荐指数
3
解决办法
7122
查看次数

为什么控制由于其保护级别而无法访问?

我正在尝试从program.cs访问控件的文本属性,并且它说由于受保护的级别而无法访问它.我该如何解决这个问题?

c# controls winforms

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

如何在每次访问类时设置断点

在使用第三方系统时,特别是可动态加载提供程序,控制器,组件等的非常可配置的系统,我有时只想知道何时访问某个对象或类.通常情况下,我会在源代码中的任何潜在行放置断点(令人讨厌,但它有效),但如果源不可用:

如何指示Visual Studio 2010 Ultimate打破对给定类的任何和每次访问?

注意:就我的经验而言,这通常是不可能的,但我希望看到它得到证实

.net c# debugging breakpoints visual-studio

18
推荐指数
2
解决办法
8756
查看次数

用C#开发许可证 - 我从哪里开始?

我有兴趣了解是否有任何标准或资源可以推荐用于在C#中开发许可证模型?

.net c# security licensing license-key

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

将单个实例对象作为IEnumerable返回

我有类foo的例子,我想把它作为IEnumerable返回.我可以在不创建新列表的情况下执行此操作.

也许类似如下:

IEnumerable<foo>.fromInstance(foo)
Run Code Online (Sandbox Code Playgroud)

c# ienumerable casting

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

使用什么XML版本?

我有一个在线商店,供应商可以上传和导入两种格式的文章.

  1. 纯文本(制表符分隔)
  2. XML

目前我正在使用XML 1.0.

但是我看到还有一个版本1.1

在维基百科,据说大多数用途1.0都可以使用.http://en.wikipedia.org/wiki/XML#Versions

它还声明它使用以下Unicode编码:Unicode 2.0到Unicode 3.2.

在第五版中,XML名称可能包含Balinese,Cham或Phoenician脚本中的字符以及自Unicode 3.2以来已添加到Unicode的许多其他字符

目前我只有几种基于'拉丁语'的语言,但这可能在未来发生变化,我想做好准备.

某些语言是否支持Unicode 3.2中的任何字符?v1.0对我来说安全吗?

如果您需要更多信息,请告诉我.

xml xml-1.1

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

在语言解释器中防止StackOverflow

F#作为一种语言非常适合编写语言解释器或编译器,但是,有一件事情让我们不知所措:StackOverflowException.

众所周知,无法捕获SO异常,无法从中恢复.防止这种异常的一种显而易见的技术是在你进行时计算堆栈的深度.开销,是的,但是可行,也许在每个功能中都没有必要.

使用F#,这种技术虽然没有带来太多好处.我们在解释器的动态生成表达式中大量使用尾调用优化技术.我们在SO异常中遇到的问题是:

  • 我们如何通知用户,而不是崩溃整个当前的AppDomain?
  • 如果我们计算堆栈深度,我们如何知道函数是TCO还是内联,所以我们不必计算?
  • 如果我们采用另一种方法(比如以给定的深度间隔检查堆栈本身),是否有任何(已知的)方法可以在不严重影响性能的情况下执行此操作?

只是增加堆栈大小不会有足够的帮助,我们希望给用户一个可记录的错误,最好是由调用应用程序捕获.为此,我们需要能够手动抛出异常,这使它可以捕获.但我们如何确定合适的时机?

更新:
Hans Passant在这里正确地提出了可预测性.但是,使用此DSL的程序员期望(某些)调用获得TCO,因此他们不希望有强大的堆栈限制.他们知道自己在做什么.尽管如此,他们的程序仍然需要能够优雅地消亡,至少在任何调用应用程序(即使用我们的库的C#程序)都不会受到损害的情况下.

.net stack-overflow compiler-construction f# tail-recursion

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