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

C#7对属性的Ref返回不编译【代码】

参见英文答案 > Why doesn’t returning by ref work for elements of collections? 2个在学习c#7时,我碰巧偶然发现Ref返回.下面的GetSingle方法在我学到的时候起作用,它在外面给我一个引用.但GetIns方法抛出了编译时错误.不幸的是,我无法解释为什么以及这些GetIns如何与GetSingle不同.有人可以解释一下吗? 错误:表达式不能在此上下文中使用,因为它可能不是通过引用返回的. 请注意,其中一条评...

选择看起来像错误/缺失功能的重载时,奇怪的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#编译器的功能.

.NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉【代码】【图】

当我们不再使用某个对象的时候,此对象会被 GC 垃圾回收掉。当然前提是你没有写出内存泄漏的代码。我们也知道如果生成了大量的字符串,会对 GC 造成很大的压力。 但是,如果在编译期间能够确定的字符串,就不会被 GC 垃圾回收掉了。 示例代码 下面,我创建了几个字符串,我关心的字符串是 "walterlv" , "lindexi" 以及一个当前时间。 于是使用下面的代码来验证:using System; using System.Linq; using System.Runtime.CompilerS...

msbuild.exe编译c#项目

@echo off::变量设置 set sln_path=d:\test.sln set nuget="C:\Program Files\Mono\lib\mono\nuget\nuget.exe" set msbuild="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe"::nuget %nuget% restore %sln_path%::msbuild %msbuild% %sln_path% /p:Configuration=Debug /p:Platform=x86 /t:Rebuild

为什么我无法在C#中编译在类接口中声明的自定义事件【代码】

假设我有这个:public interface ISlider {event CustomEventDelegate CustomEvent;在我实现ISlider的类中,我尝试了这个public CustomEventDelegate CustomEvent = delegate { };但它说没有实现CustomEvent. 我需要做的是这样的事情:ISlider ISlider;ISlider = slider as ISlider;if (ISlider != null){ISlider.CustomEvent += new CustomEventDelegate(MyCustomEventHandler);}else{// standard controlthis.slider.ValueChange...

c# – 自定义属性在编译时执行【代码】

我正在尝试创建一个自定义属性,它将以一种AOP方式工作(我无法访问postharp,不幸的是,我对Unity不是很熟悉).它有AttributeUsage.Method,并在其构造函数中配置测试环境的某些部分(从app.config中提取一些信息并调用一些配置环境的exes). 它的工作原理,除了现在,当我构建解决方案时,属性被执行 – 这是不可取的. 有没有办法创建一个不在编译时执行的自定义属性? 编辑>我想一个示例用法可能会有所帮助:public void Scenario1Tests {[...

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

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

c# – 为什么在编译时将dll文件复制到我项目的Bin / Debug文件夹中,尽管没有引用任何这些库?

我很困惑为什么Visual Studio创建/复制大量的库dll到我的项目的bin / Debug文件夹中虽然我没有引用任何这些库? dll表示在上述项目所在的同一解决方案的其他项目中使用的库,但我不明白为什么一个给定项目中的未引用库仍然复制到bin / …文件夹中.我使用NuGet,但我确保解决方案范围内的NuGet管理器仅包含随选择库提供的特定项目.解决方法:如果项目A引用项目B而项目B引用dll C,则项目A很可能在没有dll C的情况下不起作用(如果间接使用...

c# – 知道RazorEngine中的特定模板是否已编译【代码】

是否可以知道是否已使用RazorEngine编译特定模板?基本上,如果你打电话:Razor.Parse("Hello there @Model.Name", model, "hello-world");这将使用密钥’hello-world’编译模板.这可能是第一次花费几十毫秒,但由于缓存,第二次几乎是即时的.是否可以知道模板是否已编译?就像是:var isCompiled = Razor.IsCompiled("Hello there @Model.Name", "hello-world");解决方法:RazorEngine的v3.2.0包含用于检查缓存的ITemplateService.Has...

c# – 为什么这个代码不能编译,虽然接口是引用类型?【代码】

我很迷惑.在Why are interfaces in .Net reference types?中,据说.Net中的接口是引用类型.第一个代码片段无法编译.它说“T必须是参考类型……”public ISomeInterface DoMagic<T>(Expression<Func<object>> action, Tuple<string, DateTime, decimal> tuple) where T : ISomeInterface {Magician m = new Magician();return m.Magic<T>(()=> action, tuple.Item3);}第二个编译.public ISomeInterface DoMagic<T>(Expression<Func<o...

(C#)在运行时编译类并从原始代码调用方法【代码】

我正在尝试在C#中运行时编译代码,然后从编译的代码中调用一个函数或初始化一个在原始代码中定义的类.我目前的代码:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Reflection;namespace CTFGame {class Program{static void Main(string[] args){string code = @"using System;nam...

如何在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# – 在运行时使用Serialize.Linq编译表达式【代码】

我正在尝试序列化和反序列化Linq查询.目前我使用Serialize.Linq通过json序列化和反序列化Linq查询.像这样:public async Task StoreQuery<T>(string queriedTypeName, string queryName, Expression<Func<T, bool>> query, IEnumerable<T> results)where T : class, IStorable{var expressionSerializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());var queryJson = expressionSerializer.Seria...