【有没有理由C#/ .NET编译器没有警告Dispose()?】教程文章相关的互联网学习教程文章

C#-了解编译器优化【代码】

我试图了解编译器对非常简单的代码做了什么:if (group.ImageHeight > 1 && group.ImageWidth > 1) { //No code exists between the braces }在Debug配置中进行编译后,然后进行反编译,我将看到以下内容:if (group.ImageHeight <= 1 || group.ImageWidth <= 1);反编译发布配置会导致if (group.ImageHeight > 1) {int imageWidth = group.ImageWidth; }更完整的(原始)代码:public class Group {public int ImageHeight { get; set...

C#使用编译器常量排除完整的表格/用户控件

我想在我的项目中排除/包含完整的表格.但是,当我添加所需的#if CONST和#endif时,编译器会抱怨可能使用错误名称的资源.warning MSB3042: A namespace or class definition was found within a conditional compilation directive in the file “Form1.cs”. This may lead to an incorrect choice for the manifest resource name for resource “Form1.resx”.这是什么意思? 我该如何解决?解决方法:>说明:普通表单(从模板创建)由...

如何使用C#4.0编译器将MonoDevelop定位到.NET 2.0框架?【代码】

使用Visual Studio可以轻松实现这一点,尽管我需要使用MonoDevelop来实现这一点,因为Visual Studio编译的DLL在Unity中效果不佳. MonoDevelop DLL可以正常工作,但我想在针对.NET 2.0运行时时使用默认函数参数(C#4.0功能). MonoDevelop有可能吗?我该如何设置? 添加:为Visual Studio和MonoDevelop构建命令行 我对参数进行了排序以便于比较: MonoDevelop:目标= Mono / .NET 4C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.ex...

是否有可能欺骗C#编译器以将Nullable结构蚂蚁而不是其值装箱?【代码】

好吧,这个问题似乎很奇怪.确实是.但是我坚信,此类黑客有助于理解语言和.net平台. C#编译器对待可空类型的方式暗示了这个问题. 可空T是一个结构.但是编译器不装该结构,而是装它的值或只是空引用. 在装箱的Nullable情况下,这也很有趣.Nullable<int> myInt = boxedStruct as Nullable<int>;在这里,我认为boxedStruct不是盒装int,而是整个结构. 好吧,可能是因为在CLR级别上对Nullable的处理方式有所不同,因为我无法理解下面程序的输出....

c# – 忽略ObsoleteAttribute编译器错误【代码】

我有一个标有以下属性的枚举值.每当使用该值时,第二个参数指示编译器发生错误.我希望这个行为适用于实现我的库的任何人,但我需要在我的库中使用这个枚举值.如何告诉编译器忽略我库中几次使用的过时错误.public enum Choices {One,Two,[ObsoleteAttribute("don't use me", true)] Three,Four }解决方案(谢谢大家)public class EnumHack {static EnumHack(){// Safety checkif (Choices!= (Choices)Enum.Parse(typeof(Choices), "Thr...

c#-编译期间未发出编译器警告CS4014【代码】

当被调用方法在引用程序集中时,编译器警告CS4014(在不等待结果的情况下调用异步方法)不会作为警告发出. 当被调用的方法在同一程序集中时,将正确发出警告. 当两个项目包含在同一解决方案中时,在Visual Studio中会发出编译器警告. 造成这种差异的原因似乎是编译器仅具有编译的引用程序集,而Visual Studio具有两个程序集的源代码. 问题是:为什么这两种行为不同?并且有什么办法可以在编译期间发出CS4014警告? 要复制此行为,请设置两...

是否可以为未分配的局部变量保证CS0165 C#编译器错误?【代码】

在这样的代码中:int val;if (something())val = 10;val++; // Error CS0165 Use of unassigned local variable当使用局部变量时,如果没有确定地初始化它,我会收到CS0165错误消息. 在C语言世界中,这种情况是未定义的行为类情况,这意味着任何情况都是允许的.因此,也许有一个编译器错误,也许有一个编译器警告,也许有一个运行时错误,也许代码只使用了当时内存中的任何内容,并祝您好运. 是否可以为C#中的此类代码保证CS0165? 是否存在...

c#-根据编译器标志/目标框架安装nuget软件包【代码】

我正在尝试为.NET的多个框架版本提供我的库(4.0与该问题有关). 我的库需要异步/等待支持,因此需要nuget包“ Microsoft.Bcl.Async”.但我只想在.NET 4.0版本中引用它,而在> = .NET 4.5中不希望引用它 有没有简单的方法可以实现这一目标?解决方法:Install nuget packages based on compiler flags / Target framework若要解决此问题,您可以在项目文件中使用PackageReference而不是packages.config. 工具->选项-> NuGet程序包管理器-...

C#编译器对语言进行了哪些扩展?

在Eric Lippert的blog entry on umpires以及C#编译器和规范中,他做出了以下声明:(or deliberately; we implement a small number of extensions to the formal C# language)这让我想知道,他到底指的是什么扩展名?解决方法:在他的评论中,他给出了一些答案,(并且他在过去的博客文章中也给出了一些答案) 处理常数0,类型化引用(http://www.eggheadcafe.com/articles/20030114.asp),条件表达式的类型分析… 但是他想说的是,这对最终用...

如何驱动C#,C或Java编译器在编译时计算1 2 3 … 1000?

在最近的一次采访中,我被问到一个非常奇怪的问题.面试官问我如何使用编译器功能计算1 2 3 … 1000.这意味着我不允许编写程序并执行它,但我应该编写一个程序,可以驱动编译器在编译时计算这个总和,并在编译完成时打印结果.作为提示,他告诉我,我可能会使用编译器的泛型和预处理器功能.可以使用C,C#或Java编译器.有任何想法吗??? 这个问题与没有任何循环asked here计算总和无关.此外,应该注意,总和应该在编译期间计算.使用C编译器指...

c# – 如何以编程方式调用C编译器?

出于业务原因,我想创建一个C#应用程序,它将C文件/片段作为输入,编译它(可能在引擎盖下调用C编译器)并输出编译结果. 你知道怎么做吗? 提前致谢.解决方法:使用CL.exe

c# – 不兼容的双重拼接 – 编译器未检测到【代码】

在今晚测试一些代码时,我天真地尝试了一个双重转换将List转换为IQueryable(注意:我知道.AsQueryable(),请阅读整个问题):var data = (IQueryable<MyType>)(List<MyType>)Application["MyData"];我没有考虑这是否有效,但我注意到Visual Studio中没有错误,并且我能够编译代码而没有错误,所以我认为它会起作用.但在我发布Web应用程序并去查看页面后,我收到了以下错误(如预期的那样):Unable to cast object of type‘System.Collecti...

c# – 编译器是否优化了重复的相同检查【代码】

我遇到了一些反复检查相同条件的代码.好像C#6会让我们摆脱这个丑陋的冗余代码,但与此同时,引入bool变量是否有任何好处,或者编译器是否足够聪明以便为我们排序 而不是反复比较同样的事情一遍又一遍? (即使我们正在进行检查,我会假设将结果藏在一个布尔将会(稍微)更快?)// here we're doing the same check over and over again string str1 = (CustomerData == null) ? string.Empty : CustomerData.str1; string str2 = (Custome...

C#编译器优化【代码】

为什么编译器会优化我的代码? 我有2个功能:public void x1() {x++;x++; } public void x2() {x += 2; } public void x3() {x = x + 2; } public void y3() {x = x * x + x * x; }这是我在发布模式下编译后可以看到的ILSpy:// test1.Something public void x1() {this.x++;this.x++; }// test1.Something public void x2() {this.x += 2; } // test1.Something public void x3() { this.x += 2; } // test1.Something public voi...

c# – 为什么编译器不喜欢隐式地转换为uint?【代码】

我在C和C#中遇到了关于uint使用的几个类似的怪癖,现在我想知道推理(对于每个例子可能完全不同).对于这两个示例,请注意我正在编译时将警告级别设置为最大值. (1)gcc抱怨在下面比较int和uint,而vc没有:uint foo = <somevalue>; if( foo == ~0 ) //right here...比较0就可以了,没有在gcc和vc上进行任何转换. (2)在C#3.5中,我遇到了一个类似的问题.以下工作正常:uint foo = 1; uint bar = 2;但这会给出一个uint / int警告:bool con...