我一直使用私有和公共方法.但是,我不明白他们为什么工作.创建一个小型Hello World程序:
public class CallPublicHelloWorld
{
public void CallHelloWorld()
{
publicHelloWorld();
privateHelloWorld();
}
private void privateHelloWorld()
{
Console.WriteLine("Hello World");
}
public void publicHelloWorld()
{
Console.WriteLine("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
IL为公共方法创建:
IL_0000: nop
IL_0001: ldstr "Hello World"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
Run Code Online (Sandbox Code Playgroud)
IL为私有方法创建:
IL_0000: nop
IL_0001: ldstr "Hello World"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
Run Code Online (Sandbox Code Playgroud)
它完全相同.
JIT如何区分并验证遵守私人/公共规则?
我一直在使用.NET Core 1.0.1.我只想尝试启动并运行Hello World页面.在构建期间,我遇到了以下错误:
The type or namespace name 'Web' does not exist in the namespace 'System' (are you missing an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
我尝试添加对project.json的引用:
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"System.Web": "4.0.0" //Right here
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:The dependency System.Web >= 4.0.0 could not be resolved.我似乎无法像在C#console/dll库中那样正常添加引用.
我需要安装另一个实际包含system.web程序集的软件包吗?或者有没有办法手动添加此引用?
从事件日志类的文档中,EventLogEntryCollection是事件日志条目的动态列表.它建议直接使用Count属性,而不是将其值存储在变量中.实现此行为:
private void ReadEventLog()
{
EventLog eventLog = new EventLog("Application", "TheGreatestMachineInTheWorld");
EventLogEntryCollection eventLogEntries = eventLog.Entries;
for (int i = 0; i < eventLogEntries.Count; i++){
EventLogEntry entry = eventLog.Entries[i];
//Do Some processing on the entry
}
Run Code Online (Sandbox Code Playgroud)
对于大型事件日志(> 20000个条目)来说速度很慢.for循环而不是foreach的原因是因为我需要迭代器位置来指示这个东西与完成的接近程度.
存储count变量并迭代:
int eventLogEntryCount = eventLogEntries.Count;
for (int i = 0; i < eventLogEntryCount; i++){
EventLogEntry entry = eventLog.Entries[i];
//Do Some processing on the entry
}
Run Code Online (Sandbox Code Playgroud)
提供显着的性能提升.但是,如果在处理发生时写入事件日志,则可能会导致索引超出范围异常.有没有办法静态存储这个列表,所以计数不会改变?
我正在浏览堆栈溢出,我遇到了这个问题:
在这个问题中,这个小宝石存在:
int i = +1
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这种语法.所以我在visual studio中打开了交互式C#窗口:
Microsoft (R) Roslyn C# Compiler version 1.3.4.60902
Loading context from 'CSharpInteractive.rsp'.
Type "#help" for more information.
> int i = +1;
> i
1
> +1 == 1
true
Run Code Online (Sandbox Code Playgroud)
这类似+=吗?这是一些新的语法吗?这个运营商是什么?它与普通变量声明有什么不同?