Tag: C#的

这个对象生命周期扩展闭包是一个C#编译器错误吗?

当我碰到C#编译器(如果有问题的话)的一些非常好奇的代码的时候,我正在回答关于closures(合法地)延长对象生命期的可能性的问题。 最短的repro我可以find如下: 在调用包含types的静态方法的同时创build一个捕获本地的lambda。 将生成的委托引用分配给包含对象的实例字段。 结果:编译器创build一个闭包对象,该闭包对象引用创buildlambda的对象,当它没有理由时 – 委托的“内部”目标是一个静态方法,并且lambda创build对象的实例成员不需要当代表执行时,(而不是)被触摸。 实际上,编译器就像程序员没有理由地捕捉到了this 。 class Foo { private Action _field; public void InstanceMethod() { var capturedVariable = Math.Pow(42, 1); _field = () => StaticMethod(capturedVariable); } private static void StaticMethod(double arg) { } } 从发布版本生成的代码(反编译为“简单”C#)看起来像这样: public void InstanceMethod() { <>c__DisplayClass1 CS$<>8__locals2 = new <>c__DisplayClass1(); CS$<>8__locals2.<>4__this = this; // What's this doing […]

我可以使用if(pointer)而不是if(pointer!= NULL)吗?

if(pointer)或if(pointer != NULL) ,检查一个指针不是NULL是否安全?

为什么要在C ++中声明一个抽象类的虚析构函数?

我知道在C ++中为基类声明虚析构函数是一个很好的习惯,但是对于作为接口起作用的抽象类声明virtual析构函数总是很重要的。 请提供一些原因和示例。

LINQ – 完全外部join

我有一个人的ID和他们的名字,以及一个人的ID和他们的姓名列表。 有的人没有名字,有的没有姓; 我想在两个列表上完成一个完整的外连接。 所以下面的列表: ID FirstName — ——— 1 John 2 Sue ID LastName — ——– 1 Doe 3 Smith 应该产生: ID FirstName LastName — ——— ——– 1 John Doe 2 Sue 3 Smith 我是LINQ的新手(所以请原谅我,如果我是跛脚),并发现了很多“LINQ外连接”的解决scheme,看起来都非常相似,但似乎留下了外部连接。 我到目前为止的尝试是这样的: private void OuterJoinTest() { List<FirstName> firstNames = new List<FirstName>(); firstNames.Add(new FirstName { ID = 1, Name = "John" }); […]

如何从C#中的窗体返回值?

我有一个主窗体(我们称之为frmHireQuote),它是一个主MDI窗体(frmMainMDI)的子窗体,当单击一个button时,通过ShowDialog()显示另一个窗体(frmImportContact)。 当用户单击frmImportContact上的“OK”时,我想将几​​个stringvariables传回给frmHireQuote上的某些文本框。 请注意,可能有多个frmHireQuote实例,回到调用frmImportContact实例的实例显然是很重要的。 这样做的最好方法是什么?

为什么用0初始化纯虚函数?

我们总是声明一个纯虚函数: virtual void fun () = 0 ; 即,它总是分配给0。 我的理解是,这是初始化这个函数的Vtable条目为NULL和任何其他值在这里导致编译时错误。 这种理解是否正确?

有没有一种方法来导航到一个接口的方法的真正实现?

在Visual Studio中,右键单击某个方法调用时,除非通过接口访问此方法,否则您将转到该方法的实现中:在这种情况下,您将转到接口方法而不是实际实现。 有没有一种方法/提示(键快捷键或任何东西)来访问这个实际的实现? 否则,你只是添加一些评论,只是为了记住你在哪里实现它,这是真的不生产和容易出错! 更新:有趣的答案,但我不是很满意,因为所有的都很麻烦。 我会举一个确切的例子: IInterface iInterface = someObject; iInterface.someMethod(); 实际上,如果Visual Studio只是稍微聪明一些,只需要在方法调用上方查看一行,就可以看到真实对象在哪里。 这将为我节省很多击键,并避免使用“查找所有引用”,然后用疲惫的眼睛扫描行,看看哪一行包含正确的:)

你如何获得在C#中的文件大小?

我需要一种方法来获取使用C#文件的大小,而不是磁盘上的大小。 这怎么可能? 目前我有这个循环 foreach (FileInfo file in downloadedMessageInfo.GetFiles()) { //file.Length (will this work) } 这将返回磁盘的大小或大小?

我可以在Java中通过引用传递参数吗?

我想要类似于C#的ref关键字的语义。

从entity framework中删除单个logging?

(重述) 我有一个名为IDentity framework中的SQL Server表和一个名为ID键列。 如何使用entity framework从表中删除单个logging?