【c#-编译期间未发出编译器警告CS4014】教程文章相关的互联网学习教程文章

c# – 为什么Task.Factory.StartNew()没有为await抛出编译器警告?【代码】

在visual studio 2012和(我假设)之外,对未等待的异步功能的调用会产生警告,即public static async Task FunctionAsync() {await Task.Delay(10); }public static void SyncCaller() {FunctionAsync(); }SyncCaller唯一的代码行将显示编译器警告:“由于不等待此调用,因此当前方法在调用完成之前继续运行.” 但是,如果我重写SyncCaller():public static void SyncCaller() {Task.Factory.StartNew(() => { }); }没有这样的警告,但...

c# – 将int.MaxValue赋值给变量时编译器的响应方式不同【代码】

参见英文答案 > Why does int32.maxvalue + 1 overflow a long? 5个根据documentation int.MaxValue是一个int字段.当我做int a = int.MaxValue; int b = a + 1;b具有预期的int.MinValue值.但是,当我这样做int a = int.MaxValue + 1;我收到编译错误The operation overflows at compile time in checked mode为什么会有区别?解决方法:从https://msdn.microsoft.com/en-us/library/aa691319(v=vs...

选择看起来像错误/缺失功能的重载时,奇怪的C#编译器行为【代码】

我最近发现了一个有趣的C#编译器行为.想象一下这样的界面:public interface ILogger {void Info(string operation, string details = null);void Info(string operation, object details = null); }如果我们这样做logger.Info("Create")编译器会抱怨他不知道选择哪个重载(不明确的调用……).似乎合乎逻辑,但是当你尝试这样做时:logger.Info("Create", null)它突然没有麻烦,搞清楚null是一个字符串.此外,似乎找到正确的重载的行为...

c# – 如果编译器可以对整数文字执行隐式缩小转换,那么它也应该【代码】

如果编译器能够将整数文字隐式转换为字节类型并将结果赋值给b(b = 100;),为什么它也不能隐式地将表达式100的结果(结果类型为整数)赋给b?byte a = 10;byte b = a; //okb = 100; //okb = a + 100;//error - explicit cast neededb = (byte)(a + 100); // ok感谢名单解决方法:这一切都与静态类型安全有关 – 在编译时,我们是否可以安全地知道表达式的类型.使用文字,编译器可以正确地告诉它是否可以转换为字节.在字节a = 20中,20是可转...

调用Mono C#编译器

为了调用MS C#编译器,有CSharpCodeProvider(http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx) 但是如何调用Mono编译器呢? 我想知道编译后是否有任何错误.解决方法:我没有使用过Mono,但快速Bing在Mono文档中出现了以下Microsoft.CSharp.CSharpCodeProvider,Mono是否有可能实现针对Mono C#编译器的功能.

C#便携式IDE和编译器 – 它只需要在USB闪存驱动器上

它存在一个完全可移植的编译器和C#的IDE?编写C#应用程序所需的所有东西都需要在USB闪存驱动器上(甚至是.NET框架).所以,我需要的是一个完全集成的编程工具,用于插入闪存驱动器并准备编码. 它存在这样的东西? LE:我可以通过使用虚拟机来实现这一点.我问我能否在没有它的情况下做到这一点.那么,我需要在USB上做什么.解决方法:您可以按照自己的方式设置VM,并将图像放在USB密钥上. 有许多免费和便携式virtual machines可供您使用. 更...

如何在Visual Studio 2015输出窗口中阻止C#编译器输出?

当我使用默认编译器在Visual Studio 2015中构建我的C#代码时(项目没什么异常),我在输出窗口中得到输出,看起来有点像这样. (实际宽度不具代表性,因为我用XXX替换了相当长的路径.) 1> XXX(402,13,402,16):错误CS1955:非可调用成员’Lo1> g’不能像方法一样使用.1> XXX(424,25,424,28):错误CS1955:非可调用成员’Lo1> g’不能像方法一样使用. 据推测,编译器正在打印非可调用成员’Log’不能像方法一样使用,某些地方正在插入并弹出...

在C#中是否有类似[[noreturn]]的东西来表示编译器该方法永远不会返回值?【代码】

对于我的一些代码,我使用的方法如下所示:public static void Throw<TException>(string message) where TException : Exception {throw (TException) Activator.CreateInstance(typeof(TException), message); }我想像这样使用它(简单的例子):public int MyMethod() {if(...){return 42;}ThrowHelper.Throw<Exception>("Test");// I would have to put "return -1;" or anything like that here for the code to compile. }现在,...

c#编译器决定自己使用stackalloc吗?

我找到了一个博客条目,表明有时c#编译器可能会决定将数组放在堆栈而不是堆上: Improving Performance Through Stack Allocation (.NET Memory Management: Part 2) 这家伙声称:The compiler will also sometimes decide to put things on the stack on its own. I did an experiment with TestStruct2 in which I allocated it both an unsafe and normal context. In the unsafe context the array was put on the heap, but in...

c# – 返回字符串时的编译器优化【代码】

如果我有private string Foo(string decrypted) {return decrypted.Substring(blah); }和private string Foo(string decrypted) {string s = decrypted.Substring(blah);return s; }这是一样的吗?编译器是否能够删除s? 怎么样private string Foo(string decrypted) {string s = decrypted.Substring(blah);string t = s;return t; }? 谢谢.解决方法:在我看来,问题基本上是“C#编译器是否支持named return value optimization(NR...

c# – 编译器选择错误的重载调用IEquatable.Equals【代码】

在性能敏感的程序中,我试图显式调用IEquatable< T> .Equals()而不是Object.Equals(以避免在我的情况下装箱).尽管我付出了最大努力,但编译器总是选择Object.Equals() – 我不明白.一个人为的例子:class Foo : IEquatable<Foo> {public bool Equals(Foo f){Console.WriteLine("IEquatable.Equals");return true;}public override bool Equals(object f){Console.WriteLine("Object.Equals");return true;} }同样可以设计的代码来证明...

c# – 如何使用.NET编译器平台创建一个const声明【代码】

我正在尝试使用Roslyn创建一个小代码生成器,或者现在称为.NET编译器平台,我使用的是encodeom,这很麻烦,但是MSDN得到了参考,现在Roslyn几乎没有文档,所有文档都专注于代码分析代替代码生成.所以我的问题很简单:我怎样才能创建如下内容:private const string MyString = "This is my string";使用Compiler Platform类?我找到了类似FieldDeclarationSyntax和ExpressionSyntax的东西,但我发现的所有样本都会产生类似的东西 Mycla...

为什么C#编译器不能将枚举负值转换为枚举?【代码】

此代码不能与il/k4zwlgdg5gbaygtxafwkyfsdcaoadsaiwbswbjguogqxbbggeybvbgnmfysmanwhswaexgbzabqbkzq3ayakhgqbrcmhqb+gfrgbeggixlv6cqfoajdlkbfblbyes5vmzigvamac4ykzm2sga===' title='latest C# compiler' rel='nofollow' target='_blank'>latest C# compiler一起编译:public class Program {public static void Main(){IntEnum a = (IntEnum)-1;} }public enum IntEnum : int { }当你试图编译它时,它会引发(3,22,3,29): Error C...

c# – .NET Core上的Roslyn Scripting API:为什么编译器会抱怨“错误CS1501:WriteLine没有重载需要2个参数”?【代码】

我正在开发一个针对OSX的netcoreapp1.0项目,我正在使用Roslyn设置一个脚本,如下所示:var scriptText = File.ReadAllText(args[0]);var scriptOptions = ScriptOptions.Default.WithReferences(typeof(System.Object).GetTypeInfo().Assembly);var script = CSharpScript.Create(scriptText, scriptOptions, typeof(Globals));var scriptArgs = new string[args.Length-1]; Array.Copy(args, 1, scriptArgs, 0, args.Length-1);scr...

c# – 使用Mono编译器/创建一个新的仍在输出Windows EXE?

这只是一个想法,但是我想知道在使用Mono编译器还是在输出Windows EXE的同时写一个新编译器有多难? 这种想法的原因在于我看到人们“创造性地”滥用C#语言以获得诸如代码合同或面向方面的编程之类的东西,并且有时感觉人们伸展得太远了. 关于.net的好处是,最后,我们想要的只是.net 2.0 CLR的有效IL.但是,Microsoft C#编译器已关闭,无法扩展.只能在不同的程序集中混合使用不同的语言. 这个想法(警告:可能听起来很可怕)是使用可以扩展...