这两个陈述在逻辑上是等价的:
SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100
SELECT * FROM table WHERE someColumn >= 1 AND someColumn <= 100
Run Code Online (Sandbox Code Playgroud)
一个与另一个有潜在的性能优势吗?
的IHideObjectMembers特技(又名IFluentInterface)可用于例如,在连贯接口实现隐藏System.Object从智能感知构件.(如果你不知道这个技巧,你可以通过上面的链接阅读它;我只是在这里重复界面的通常声明:)
using System;
using System.ComponentModel;
[EditorBrowsable(EditorBrowsableState.Never)]
public interface IHideObjectMembers
{
[EditorBrowsable(EditorBrowsableState.Never)] bool Equals(object obj);
[EditorBrowsable(EditorBrowsableState.Never)] int GetHashCode();
[EditorBrowsable(EditorBrowsableState.Never)] Type GetType();
[EditorBrowsable(EditorBrowsableState.Never)] string ToString();
}
Run Code Online (Sandbox Code Playgroud)
我现在应该能够隐藏System.Object其他类型的成员,如下所示:
public class SomeClass : IHideObjectMembers { ... }
Run Code Online (Sandbox Code Playgroud)
要么:
public interface ISomeInterface : IHideObjectMembers { ... }
Run Code Online (Sandbox Code Playgroud)
我在VS 2008 Express和VS 2008 Standard中都试过这个.但是,根本没有成员隐藏IntelliSense.我已经EditorBrowsableAttribute在不同的项目中使用它,它总是运作良好; 但是,它在这种特定情况下不起作用.
http://i48.tinypic.com/vhb4fq.jpg
如果事情按预期发挥作用,我只会看到这种SomeMethodTwo方法.
我错过了什么吗?
PS:您可以从声明和屏幕截图中推断出我的示例代码.我有一个SomeClass叫做单个虚拟方法的类SomeMethodTwo.非常简单.我没有System.Object在这个类中重新实现这四个方法,因为这不是必需的.
有人可以告诉我何时使用a Dispatcher以及何时使用该SynchronizationContext课程?
有一段时间我一直在使用Dispatcher从后台线程排队任务,然后我发现了SynchronizationContext.
我目前正在处理涉及System.Reflection.Emit代码生成的问题.我想弄清楚default(SomeType)在C#中使用的地方发出什么CIL .
我从Visual Studio 11 Beta运行了一些基本实验.JustDecompile显示我以下CIL输出default(bool),default(string)以及default(int?:
.locals init (
[0] bool V_0,
[1] string V_1,
[2] valuetype [mscorlib]System.Nullable`1<int32> V_2
)
// bool b = default(bool);
ldc.i4.0
stloc.0
// string s = default(string);
ldnull
stloc.1
// int? ni = default(int?);
ldloca.s V_2
initobj valuetype [mscorlib]System.Nullable`1<int32>
Run Code Online (Sandbox Code Playgroud)
从这一点来看,default(T)似乎由编译器解决了给定类型的最合适的CIL.
我继续看看在更一般的情况下会发生什么,使用三种通用方法:
T CreateStructDefault<T>() where T : struct { return default(T); }
T CreateClassDefault<T>() where T : class { return default(T); } …Run Code Online (Sandbox Code Playgroud) 我怎么能等待n个脉冲?
… // do something
waiter.WaitForNotifications();
Run Code Online (Sandbox Code Playgroud)
我希望上面的线程等到被通知n次(由n个不同的线程或n次由同一个线程).
我相信有一种计数器可以做到这一点,但我找不到它.
在动态对象创建一个匿名类型的对象(即在对象初始化器内)时,属性是否可能以某种方式相互引用?我在下面的简化示例需要重用该Age属性,而不需要进行第二次大量调用GetAgeFromSomewhere().当然它不起作用.有关如何实现这一目标的任何建议?
var profile = new {
Age = GetAgeFromSomewhere(id),
IsLegal = (Age>18)
};
Run Code Online (Sandbox Code Playgroud)
对于动态对象匿名类型的对象初始化器,这样的事情是可能的还是不可能的?
另见这些相关资源:
- .NET垃圾收集器是否执行代码的预测分析?(在Stack Overflow上)
- WP7:GC何时将局部变量视为垃圾(MSDN上的博客文章)
换一种说法:
可以在变量超出范围之前回收局部变量引用的对象(例如,因为变量已分配,但之后不再使用),或者该变量在变量退出之前保证不符合垃圾收集条件.范围?
让我解释:
void Case_1()
{
var weakRef = new WeakReference(new object());
GC.Collect(); // <-- doesn't have to be an explicit call; just assume that
// garbage collection would occur at this point.
if (weakRef.IsAlive) ...
}
Run Code Online (Sandbox Code Playgroud)
在这个代码示例中,我显然必须计划object垃圾收集器回收new'ed的可能性; 因此if声明.
(请注意,我使用weakRef的唯一目的是检查新人object是否还在.)
void Case_2()
{
var unusedLocalVar = new object();
var weakRef = new WeakReference(unusedLocalVar);
GC.Collect(); // <-- doesn't have to be an explicit call; just assume that …Run Code Online (Sandbox Code Playgroud) .net c# garbage-collection weak-references compiler-optimization
这是测试浮点值相等性的后续行动:"精度"常量是否有标准名称?.对于平等,
有一个非常相似的问题Double.Epsilon,大于,小于,小于或等于,大于或等于.
众所周知,对两个浮点值x和y的相等测试应该看起来更像这样(而不是简单的=):
abs(x - y)< epsilon ,其中epsilon是一个非常小的值.
如何为epsilon选择一个值?
显然最好选择epsilon尽可能小的值,以获得相等性检查的最高精度.
例如,.NET框架提供一个常量System.Double.Epsilon(= 4.94066×10 -324),表示System.Double大于零的最小正值.
但是,事实证明这个特定值不能可靠地用作epsilon,因为:
0 +
System.Double.Epsilon≠01 +
System.Double.Epsilon= 1(!)
也就是说,如果我理解正确,因为该常数小于机器epsilon.
→这是对的吗?
→这是否也意味着我可以可靠地使用epsilon:= machine epsilon进行相等测试?
删除了这两个问题,因为它们已经与上面提到的第二个SO问题得到了充分的回答.
链接到维基百科的文章说,对于64位浮点数(即double许多语言中的类型),机器epsilon等于:
2 -53,或约.0.000000000000000111(小数点后15个零的数字)
→是否遵循这一点,所有64位浮点值保证精确到14(如果不是15)数字?
如果我在本地安装了SQL Server 2008和SQL Server 2012,我只想亲自尝试一下; 但是我只安装了新版本,并希望保持这种方式.
Microsoft.SqlServer.Types.dll,主要版本10.Microsoft.SqlServer.Types.dll,主要版本为11.除其他外,两个程序集都暴露了一种SqlGeometryBuilder类型.两个程序集版本之间的一个显着区别是2012类型有一个额外的重载方法AddCircularArc,而2008类型没有.
因为并行引用这两个程序集并不是一件容易的事(也许是一个坏主意),我想知道我是否可以使用2012版本 - 即使是针对SQL Server 2008实例,只要我不使用它AddCircularArc.
任何人都可以分享他们的经验吗?
spatial backwards-compatibility sql-server-2008 sql-server-2012 sqlgeometry
在Visual Studio中,VB代码编辑器窗口中有一个方法下拉列表.这在下面的屏幕截图中突出显示.
我想知道是否有一个默认的键盘快捷键来访问此列表,或者是否可以手动设置这样的键盘绑定(如果是,如何)?

c# ×4
.net ×1
between ×1
cil ×1
default ×1
dispatcher ×1
epsilon ×1
filter ×1
intellisense ×1
performance ×1
precision ×1
properties ×1
spatial ×1
sql-server ×1
sqlgeometry ×1
vb.net ×1
wpf ×1