【c# – 在编译时计算表达式】教程文章相关的互联网学习教程文章

在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 / c#/ java不同?

我试图理解这些语言是如何工作的.不幸的是,我只读过非常肤浅的东西.我将总结我已经知道的内容,如果你能纠正我,我会很高兴,最重要的是,帮助我提高我的一点半知识. C : C编译器预处理所有源文件.这意味着它实际上将字符串插入到最初位于宏的位置.之后,它为包含机器独立字节码的每个源文件创建一个.obj文件.然后,链接器将库中的所有外部.obj文件与定制的.obj文件链接在一起,并将其编译为.exe. Java的: Java代码被编译成机器独立的“...

c# – 条件编译问题

我有两个项目A和B. A取决于B.我希望发生以下情况 如果B定义条件编译符号,我想A也自动定义它.我能做到吗?解决方法:不,基本上.编译符号在项目设置中基于每个项目应用,并且基于每个文件应用,具体取决于#define编译指示.没有办法让你正在编译的项目确定你的编译符号 – 它们在编译后有效地消失了. 最简单的方法是创建适当的解决方案范围的配置,并在其中设置定义适当符号的项目配置.

c# – 当CompilerParameters.GenerateInMemory == true时,在运行时编译一个类【代码】

我正在运行时编译动态程序集.它需要引用另一个dll.只要我在CompilerParameters中设置了OutputAssembly,一切正常.但是一旦我设置了GenerateInMemory = true;它失败:var compilerParameters = new CompilerParameters(); if( compileInMemory )compilerParameters.GenerateInMemory = true; elsecompilerParameters.OutputAssembly = "<my_dynamic_dll_path>"; compilerParameters.ReferencedAssemblies.Add( "<other_dll_path>" );...

c# – 确定将lambda编译为实例方法的时间【代码】

前言:我试图在这里非常精确地描述这个场景. TL; DR版本是’如何判断lambda是否会编译成实例方法或闭包’… 我在我的WPF项目中使用MvvmLight,并且该库最近更改为使用WeakReference实例以保存传递给RelayCommand的操作.因此,实际上,我们有一个对象,它将WeakReference保存到Action< T>. 现在,由于升级到最新版本,我们的一些命令停止工作.我们有一些像这样的代码:ctor(Guid token) {Command = new RelayCommand(x => Messenger.Defau...

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;} }同样可以设计的代码来证明...

使用Mono 5编译包含ValueTuple的C#7代码【代码】

我正在尝试使用Mono 5在Linux构建服务器上编译我的新C#7代码.不幸的是,当我使用新的ValueTuple语法时,项目失败:MyClass.cs(100,38): error CS1003: Syntax error, ‘(‘ expected [/path/to/My.csproj]我的项目文件中有以下包引用:<PackageReference Include="System.ValueTuple" Version="4.3.0" />我在快速构建脚本中使用以下命令:# msbuild My.sln /t:restore # msbuild My.sln /p:Configuration=Release /p:Platform="Any C...

c# – 如何将复杂的BAML反编译为有效的XAML【代码】

我试过ILSpy,但它失败了:System.NotImplementedException: StaticResourceStartв Ricciolo.StylesExplorer.MarkupReflection.XmlBamlReader.ProcessNext()в Ricciolo.StylesExplorer.MarkupReflection.XmlBamlReader.ReadInternal()в Ricciolo.StylesExplorer.MarkupReflection.XmlBamlReader.Read()в System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)в System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, L...

c# – 为什么CLR不编译溢出const,但是对于变量它呢?【代码】

看下面的代码,我只是想了解背后的原因……const int a = 2147483647; const int b = 2147483647;int c = a + b; // it doesn't allow to compile!!! int a = 2147483647; int b = 2147483647;int c = a + b; // it allows to compile!!!解决方法:const表达式在编译时解析,非const表达式在运行时解析.默认情况下,每个都有不同类型的溢出检查上下文.根据C#规范:For non-constant expressions (expressions that are evaluated atrun...

c# – 在编译时计算表达式【代码】

我知道这已被问了很多,但仅限于C/C++和Java.问题与使用常量表达式的性能优势有关: 当我调用只有常量作为参数的静态函数时,有没有办法告诉编译器它应该在编译时评估调用并用结果替换调用? 例:const double pi = Math.PI; //works as Math.PI is a constant const double spi = Math.Sin(Math.PI); //compiler error, because expression must be constant 是否没有指令(更好:属性)明确地告诉编译器像Math.Sin()这样的静态方法...

C#动态编译【代码】

公司需要自己做一个打包程序,将需要升级文件和脚本做成一个exe安装包,双击exe安装包的时候输入相关的参数就执行升级(文件覆盖和脚本执行),大概思路如下:1.先把exe的逻辑写好,包括提取文件和脚本执行代码2.exe从资源中提取文件和脚本3.组包程序将需要升级的脚本和文件加入到exe的资源文件,然后编译成exe。 exe的核心代码如下:if (!Directory.Exists("myFile")) {Directory.CreateDirectory("myFile"); }//获取资源文件并输...

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...