以下评论意味着什么?
// The line below only works when linked rather than
// referenced, as otherwise you need a cast.
// The compiler treats it as if it both takes and
// returns a dynamic value.
string value = com.MakeMeDynamic(10);
Run Code Online (Sandbox Code Playgroud)
我理解引用程序集的内容.您可以在命令行使用/ ref:开关编译程序文件时引用它,也可以在Visual Studio中向程序集添加静态引用.
但是如何链接到.NET中的程序集?他的意思是,使用Reflection(Assembly.LoadFile())加载程序集?或者,Win32 API LoadLibrary()?或者,.NET是否有我从未听说过的链接器?
我已经阅读了这个答案并从中理解了它突出显示的具体情况,即当你在另一个lambda中有一个lambda并且你不想意外地让内部lambda也用外部lambda编译时.编译外部时,您希望内部lambda表达式保留为表达式树.在那里,是的,引用内部lambda表达式是有道理的.
但我相信这就是它.是否还有其他用例来引用lambda表达式?
如果没有,为什么所有LINQ运算符,即IQueryable<T>在Queryable类中声明的扩展引用谓词或lambda作为参数,当它们将信息打包在MethodCallExpression.
我尝试了一个例子(以及过去几天的其他一些例子),在这种情况下引用lambda似乎没有任何意义.
这是一个方法调用表达式,该方法需要一个lambda表达式(而不是委托实例)作为唯一参数.
然后我MethodCallExpression通过将其包装在lambda中来编译它.
但是,这也不会编译内部LambdaExpression(GimmeExpression方法的参数).它将内部lambda表达式保留为表达式树,并且不创建它的委托实例.
事实上,它没有引用它很好.
如果我引用该参数,它会中断并给出一个错误,表明我向该GimmeExpression方法传递了错误的参数类型.
这是怎么回事?这引用的内容是什么?
private static void TestMethodCallCompilation()
{
var methodInfo = typeof(Program).GetMethod("GimmeExpression",
BindingFlags.NonPublic | BindingFlags.Static);
var lambdaExpression = Expression.Lambda<Func<bool>>(Expression.Constant(true));
var methodCallExpression = Expression.Call(null, methodInfo, lambdaExpression);
var wrapperLambda = Expression.Lambda(methodCallExpression);
wrapperLambda.Compile().DynamicInvoke();
}
private static void GimmeExpression(Expression<Func<bool>> exp)
{
Console.WriteLine(exp.GetType());
Console.WriteLine("Compiling and executing expression...");
Console.WriteLine(exp.Compile().Invoke());
}
Run Code Online (Sandbox Code Playgroud) 我正在进行这个简单的异步调用.我想跟随调用DownloadDataTaskAsync方法并逐步进入Microsoft .NET框架源代码.
using System;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace WhereIsTheTaskSchedulerHere
{
class Program
{
static void Main(string[] args)
{
var task = GetData("http://sathyaish.net");
var buffer = task.Result;
var data = Encoding.ASCII.GetString(buffer);
Console.WriteLine(data);
Console.WriteLine("\nPress any key to continue...");
Console.ReadKey();
}
async static Task<byte[]> GetData(string url)
{
var client = new WebClient();
var data = await client.DownloadDataTaskAsync(url);
return data;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在Reflector中跟踪调用,直到代码调用System.Net.WebClient.DownloadBits方法为止.如果调用是异步执行的,则此方法通过调用类上的异步编程模型(APM)方法进一步调度线程池线程BeginGetResponse上的工作System.Net.WebRequest.
这是DownloadBitsReflector 的方法代码.
private byte[] DownloadBits(WebRequest request, Stream …Run Code Online (Sandbox Code Playgroud) .net c# visual-studio visual-studio-debugging visual-studio-2015
我点击一个表单上有一个按钮,FooAsync并在完成时阻止UI线程.
以下是代码和我的问题.
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SynContextIfIDontTouchUIInWorkerThread
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#pragma warning disable 1998
private async void button1_Click(object sender, EventArgs e)
{
// Nicely prints out the WindowsForms.SynchronizationContext
// because we *are* indeed on the UI thread
this.Text = SynchronizationContext.Current.GetType().Name;
Thread.CurrentThread.Name = "UI Thread";
Debug.Print(Thread.CurrentThread.Name);
var t = FooAsync();
// CompletedSynchronously is false,
// so the other work was indeed run …Run Code Online (Sandbox Code Playgroud) 创建具有Entity Framework模型和对象上下文的类库.然后向解决方案添加新的控制台应用程序.从控制台应用程序,引用具有您的模型的项目.
现在在控制台应用中输入:
static void Main(string[] args)
{
using (var context = new ExperimentalDbContext())
{
}
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
在构建时,您将收到报告错误:
"System.Data.Entity.DbContext"类型在未引用的程序集中定义.你必须添加对程序集EntityFramework的引用... yada yada yada ...
现在,我在过去几年中已经多次这样做了,但每当我收到此错误时,我再一次无助地在互联网上搜索我当时忘记的解决方案.
解决此问题需要您在ConsoleClient项目中安装EntityFramework NuGet包.
所以,我的问题不在于修复是什么,而是为什么?因为它没有任何意义!
仅仅为了完整起见,我使用的是实体框架的v6.1.3.但是,多年来我在早期版本中也多次看到过这个错误.
更新
看来,这个问题只有当你使用的using代码块,是为了呼吁Dispose上IDisposable秒.
要测试该假设,请使用以下代码创建一个控制台应用程序,该应用程序在同一解决方案中引用ClassLibrary1,该解决方案在同一解决方案中引用ClassLibrary2:
using ClassLibrary1;
using System;
namespace TestHypothesis1
{
class Program
{
// Testing the hypothesis presented in this answer: http://stackoverflow.com/a/38130945/303685
// This seems to be the behavior with just (or may be even others I haven't tested for) …Run Code Online (Sandbox Code Playgroud) 我使用的是C#语法,但这个问题并不仅限于C#.
例1
public static long Do(long n)
{
var sqrt = (long)Math.Sqrt(n);
for(long i = 0; i < sqrt; i++)
// do something
return result;
}
Run Code Online (Sandbox Code Playgroud)
这仍然是线性时间,即使在最坏的情况下,我们只做平方根时间的操作n,这只是一小部分n?
例2
您将如何对下面算法的时间复杂度进行分类?
public static long Do(long n)
{
while (n > 1)
{
n = (long)Math.Sqrt(n);
// do something
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
在最坏的情况下,这会被称为在对数时间内完成的操作,即使我们再一次不仅仅是将迭代次数减半,而是将它们减少一个数量级,而不仅仅是一半.
我写了一个愚蠢的例子来看看这两个中的哪个,click或者submit事件,首先在类型的输入上触发submit.
但是,当我运行它时,没有任何内容写入控制台.
单步调试器中的代码会显示以下一系列事件.
它首先触发click事件处理程序,将文本"click"写入控制台,但随后不久,文本从控制台中消失.
此外,该submit事件永远不会被解雇.
我推断表单是在执行click按钮事件后提交的.我不明白的是为什么它没有进入我的submit事件处理程序?
以下是相关代码,这是完整的工作示例.它只是一个简单的HTML文件,您可以下载并在您的计算机上试用.
(function() {
let btn = document.getElementById("btnSave");
btn.addEventListener("click", function(event) {
console.log("click");
}, false);
btn.addEventListener("submit", function(event) {
console.log("submit");
// event.preventDefault();
}, false);
console.log("All done now. Click da button, chum, click it I say!");
})();Run Code Online (Sandbox Code Playgroud)
div { margin: 20px; }
input[type="submit"] { width: 200px; height: 50px; }Run Code Online (Sandbox Code Playgroud)
<div>Look at the console and then click the button, chum!</div>
<div>
<form>
<input …Run Code Online (Sandbox Code Playgroud)我刚刚用Windows 7 Home Basic购买了一台全新的联想(idealpad)笔记本电脑.没有操作系统DVD和库存,但笔记本电脑确实有操作系统恢复软件,如果你想在DVD上刻录它们.我想今天大多数硬件都是以这种方式销售的.
无论如何,我想使用IIS.我按照这些步骤进行安装.我进入控制面板 - > 程序 - > 打开或关闭Windows功能.我从列表中选择了Internet Information Services并让它安装.我认为它一定已经安装好了.
但现在,我找不到它.我尝试了这些步骤来找到inetmgr,但我也找不到MMC管理单元UI.我在哪里可以找到IIS?我甚至重新启动机器并检查但没有运气.
2011年3月23日更新
伙计们,我安装了IIS Express,并在Web上检查了很多页面,但是我在Windows 7 Home Basic框中看不到IIS管理单元(inetmgr).请帮忙!!!!!!!!!
我有一个ASP.NET MVC应用程序,它使用System.Net.HttpClient该类向ASP.NET Web API发出请求.当我开始调试它们时,MVC应用程序(即客户端)和ASP.NET Web API(即服务器)都由Visual Studio调试器在IIS Express中托管.
我想让Fiddler捕获我的MVC应用程序对ASP.NET Web API的请求.这可能吗?
c# ×7
.net ×3
algorithm ×1
asp.net ×1
asp.net-mvc ×1
async-await ×1
asynchronous ×1
big-o ×1
c#-4.0 ×1
clr ×1
com-interop ×1
fiddler ×1
iis ×1
javascript ×1
lambda ×1
linq ×1
windows-7 ×1