当我选择Build-> Build或其他任何东西时,它只构建当前选择的配置(Debug或Release).当我处于"调试模式"(我已选择调试)时,如何使其构建为示例Release?
我注意到C#编译器ret在void方法结束时生成一条指令:
.method private hidebysig static void Main(string[] args) cil managed
{
// method body
L_0030: ret
}
Run Code Online (Sandbox Code Playgroud)
我已经为.NET编写了一个编译器,无论我是否发出一个ret语句,它都可以工作(我已经检查了生成的IL,而且确实没有在那里).
我只是想知道:是否需要ret返回void任何方法?它似乎对堆栈没有任何作用,所以我认为这对于void方法来说完全没有必要,但是我想听听那些对CLR有更多了解的人的消息?
如何使用反射调用被派生类重写的基本方法?
class Base
{
public virtual void Foo() { Console.WriteLine("Base"); }
}
class Derived : Base
{
public override void Foo() { Console.WriteLine("Derived"); }
}
public static void Main()
{
Derived d = new Derived();
typeof(Base).GetMethod("Foo").Invoke(d, null);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
此代码始终显示"派生"...
我正在使用Microsoft Visual Studio Team System 2008 Team Suite.
我缺少"Configuration Manager"菜单项.我已经为配置管理器分配了一个键盘快捷键,但它没有任何效果(实际上,它会产生"叮"声).
如何让Configuration Manager适用于所有项目?
注册变量是一种众所周知的快速访问(register int i)方式.但为什么寄存器位于层次结构的顶层(寄存器,缓存,主存储器,辅助存储器)?访问寄存器如此之快的所有事情是什么?
我记得,WP7支持C#,但不支持任何.Net动态语言(Ruby或Python).是否支持除C#之外的任何其他编程语言?可以使用Boo开发应用程序吗?
在C#中将实例定义为动态意味着:
编译器不执行编译时类型检查,但运行时检查就像它对所有实例一样.
编译器不执行编译时类型检查,但运行时检查发生,与任何其他非动态实例不同.
与2相同,这会带来性能损失(微不足道的?潜在的重要性?).
我System.Double最近询问过,并被告知计算可能因平台/架构而异.不幸的是,我找不到任何信息告诉我是否同样适用System.Decimal.
我是否保证在独立于平台/架构的情况下获得与任何特定计算完全相同的结果decimal?
请考虑以下代码:
class Program
{
public static explicit operator long(Program x) { return 47; }
static int Main(string[] args)
{
var x = new Program();
Console.WriteLine((decimal) x);
}
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这个输出47; 换句话说,explicit operator long即使是演员也是如此decimal.
C#规范中是否有明确说明应该发生这种情况(如果是这样,究竟在哪里)或者这是否是我遗漏的其他一些规则的结果?
查询
var q = from elem in collection
where someCondition(elem)
select elem;
Run Code Online (Sandbox Code Playgroud)
翻译成
var q = collection.Where(elem => someCondition(elem));
Run Code Online (Sandbox Code Playgroud)
是否有LINQ语法可以转换为以下内容?
var q = collection.Where((elem, index) => someCondition(elem, index));
Run Code Online (Sandbox Code Playgroud)