小编Wat*_* v2的帖子

.NET有链接器吗?

来自Jon Skeet的博客:

以下评论意味着什么?

    // 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是否有我从未听说过的链接器?

c# clr com-interop c#-4.0

7
推荐指数
1
解决办法
2619
查看次数

为什么要引用LambdaExpression?

我已经阅读了这个答案并从中理解了它突出显示的具体情况,即当你在另一个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)

c# linq lambda custom-linq-providers linq-expressions

7
推荐指数
1
解决办法
349
查看次数

Visual Studio Debugger没有进入.NET框架源代码

我正在进行这个简单的异步调用.我想跟随调用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

7
推荐指数
1
解决办法
1625
查看次数

为什么即使我尝试从工作者更改UI,同步上下文也为null,为什么工作人员在UI线程上等待,即使我不这样做?

我点击一个表单上有一个按钮,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)

.net c# asynchronous task-parallel-library async-await

7
推荐指数
2
解决办法
598
查看次数

为什么需要在客户端项目中引用EntityFramework.dll以使DbContext IDisposable?

创建具有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代码块,是为了呼吁DisposeIDisposable秒.

要测试该假设,请使用以下代码创建一个控制台应用程序,该应用程序在同一解决方案中引用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)

.net c# entity-framework

7
推荐指数
1
解决办法
855
查看次数

你会把这种算法的时间复杂度称为什么?

我使用的是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)

在最坏的情况下,这会被称为在对数时间内完成的操作,即使我们再一次不仅仅是将迭代次数减半,而是将它们减少一个数量级,而不仅仅是一半.

c# algorithm big-o computer-science time-complexity

7
推荐指数
1
解决办法
714
查看次数

不会触发提交提交类型输入的事件

我写了一个愚蠢的例子来看看这两个中的哪个,click或者submit事件,首先在类型的输入上触发submit.

但是,当我运行它时,没有任何内容写入控制台.

单步调试器中的代码会显示以下一系列事件.

  1. 它首先触发click事件处理程序,将文本"click"写入控制台,但随后不久,文本从控制台中消失.

  2. 此外,该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)

javascript

7
推荐指数
1
解决办法
167
查看次数

在Windows 7 Home Basic上找不到IIS

我刚刚用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).请帮忙!!!!!!!!!

iis windows-7

6
推荐指数
1
解决办法
2万
查看次数

类型声明隐式是静态成员

我认识的人刚刚让我从MSDN解释这个声明,我傻眼了.

常量或类型声明隐式地是静态成员.

那个短语"或者类型声明是隐含的静态成员",对我来说没有意义.

那是什么意思?

c#

6
推荐指数
1
解决办法
239
查看次数

我如何让Fiddler捕获我的MVC应用程序向我的ASP.NET Web API发出的HTTP请求?

我有一个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的请求.这可能吗?

asp.net asp.net-mvc fiddler asp.net-web-api

6
推荐指数
1
解决办法
4579
查看次数