小编Pol*_*Pol的帖子

c#using + XmlWriter.Create ="无法访问已关闭的流."

为什么这样有效:

using (var ms = new MemoryStream())
{
    using (var dummy = new StreamWriter(ms))
    {
        var sw = new StreamWriter(ms);
        sw.WriteLine("Hello World");
        sw.Flush();
        using (StreamReader rdr = new StreamReader(ms))
        {
            ms.Position = 0;
            textBoxExc.Text = rdr.ReadToEnd();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用("无法访问封闭的流."):只有差异var dummy = XmlWriter.Create(ms)而不是var dummy = new StreamWriter(ms)

using (var ms = new MemoryStream())
{
    using (var dummy = XmlWriter.Create(ms))
    {
        var sw = new StreamWriter(ms);
        sw.WriteLine("Hello World");
        sw.Flush();
        using (StreamReader rdr = new StreamReader(ms))
        {
            ms.Position = …
Run Code Online (Sandbox Code Playgroud)

c# silverlight xmlwriter using

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

如何在ASP.NET中等待异步Web服务调用的结果以获得最佳性能

在WebForms ASP.NET站点(IIS,单个应用程序池)中,我调用了Visual Studio中引用的冗长Web服务方法作为服务引用(.NET 4.0).不幸的是,在向用户提供页面之前,我必须等待来自Web服务的信息.当前Web服务是同步调用的,因此服务器无法重用当前线程来处理对性能有影响的其他请求.

当然我可以在Visual Studio中为服务引用生成异步操作BeginGetFoo而不是调用GetFoo,但我仍然必须等待来自Web服务的结果.

这是个问题.如果我使用AsyncWaitHandle.WaitOne(如下所示),我今天使用的同步调用在整个应用程序性能方面是否会更好?

IAsyncResult result = fooSoapClient.BeginGetFoo();
result.AsyncWaitHandle.WaitOne();
var foo = fooSoapClient.EndGetFoo(result);
Run Code Online (Sandbox Code Playgroud)

当然,如果等待可以做得更好,我愿意接受建议.

.net c# asp.net iis web-services

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

通过C#中的"动态过载"进行单/双调度

为什么C#本身不支持基于参数类型通过"动态重载"进行双重调度?我发现这需要动态调度,但由于虚拟方法调用也是动态调度的,因此对语言来说并不奇怪.那么为什么这个功能不属于C#呢?使用Reflection实现此功能的最优雅的解决方案是什么(可能有一些库)?

class Program
{
    static void Main(string[] args)
    {
        var objs = new object[] { new Class1(), new Class2() };
        foreach (var item in objs)
        {
            Method(item);
        }
    }

    static void Method(Class1 obj)
    {
    }

    static void Method(Class2 obj)
    {
    }
}

class Class1
{
}

class Class2
{
}
Run Code Online (Sandbox Code Playgroud)

确实更新了,因为Method在这个例子中不是虚拟的并且只采用一个参数,这仍然是单一调度,但是只要它> 0,调度的"基数"在这个问题中并不重要.

.net c# parametric-polymorphism

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

无法将类型为“ System.Linq.EnumerableQuery`1 [Entities.Test]”的对象强制转换为类型为“ System.Data.Objects.ObjectQuery`1 [Entities.Test]”的对象

我正在使用Entity Framework 4.2(EntityFramework.dll v4.0.30319)Code First,并具有LINQ查询,该查询可以简化为:

IQueryable<Test> testQuery = from test in repository.Tests select test;
Run Code Online (Sandbox Code Playgroud)

repository.TestsIQueryable<Test>直接实现为DbSet<Test>在Enity框架的DbContext

我注意到我的查询在某种程度上区分大小写,而Microsoft SQL Server数据库中的区分大小写排序规则。可疑,所以我想跟踪SQL。但是当我这样做时:

var trace = ((ObjectQuery<Test>)testQuery).ToTraceString();
Run Code Online (Sandbox Code Playgroud)

我得到异常:

无法转换类型为'System.Linq.EnumerableQuery 1[Entities.Test]' to type 'System.Data.Objects.ObjectQuery1 [Entities.Test]'的对象。

为什么会这样?

.net c# linq-to-entities entity-framework ef-code-first

5
推荐指数
1
解决办法
4421
查看次数

System.Web.Providers - > Microsoft.AspNet.Providers?

Microsoft ASP.NET Universal Providers 1.1昨天与System.Web.Providers 1.2一起发布.在后面的nuget页面上说明:Legacy package, System.Web.Providers is now included in the 'Microsoft.AspNet.Providers' package.

这只是名称更改还是更有趣/更重要的内容?如果我System.Web.Providers引用Microsoft.AspNet.Providers1.1和Microsoft.AspNet.Providers.Core1.0,我应该删除1.2包参考吗?

asp.net nuget

5
推荐指数
1
解决办法
3107
查看次数

在Html.TextBoxFor中看不到后期操作中的模型更改?

这一定是非常明显的,但对我来说这看起来很奇怪.我有简单的控制器,带有一个属性的模型,以及显示属性值的视图,并为该属性呈现编辑器.单击按钮时,表单将被发布,并且感叹号将附加到属性.此感叹号在我的视图中可见,但仅在p标记中可见,而不是在input呈现的标记中Html.TextBoxFor().

为什么Html.TextBoxFor()忽略我在后期操作中更新了我的模型?

有没有办法改变这种行为Html.TextBoxFor()

视图

@model ModelChangeInPostActionNotVisible.Models.IndexModel

@using (Html.BeginForm())
{
    <p>@Model.MyProperty</p>
    @Html.TextBoxFor(m => m.MyProperty)
    <input type="submit" />
}
Run Code Online (Sandbox Code Playgroud)

模型

namespace ModelChangeInPostActionNotVisible.Models
{
    public class IndexModel
    {
        public string MyProperty { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

调节器

namespace ModelChangeInPostActionNotVisible.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new IndexModel { MyProperty = "hi" });
        }

        [HttpPost]
        public ActionResult Index(IndexModel model)
        {
            model.MyProperty += "!";
            return View(model);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-4

5
推荐指数
2
解决办法
3161
查看次数

调用函数返回的过程

有这个:

procedure Foo;
begin
end;

function Bar: TProcedure;
begin
  Result := Foo;
end;
Run Code Online (Sandbox Code Playgroud)

以下编译:

var
  tmp: TProcedure;
begin
  tmp := Bar();
  tmp();
Run Code Online (Sandbox Code Playgroud)

...但以下内容不能在Delphi中编译:

Bar()();
Run Code Online (Sandbox Code Playgroud)

有这种"限制"的原因吗?Bar()();语法是否在Pascal的其他"风格"中编译?将Bar()();语法编译一些其他的方面?

delphi pascal

5
推荐指数
2
解决办法
142
查看次数

为什么默认值不适用于双括号?

为什么这个编译:

return default(T);
Run Code Online (Sandbox Code Playgroud)

但这不是:

return default((T));
Run Code Online (Sandbox Code Playgroud)

完整的方法是

public static T PenultimateOrDefault<T>(this IEnumerable<T> items)
{
    if (items.Count() >= 2)
        return items.ElementAt(items.Count() - 2);
    else
        return default(T);
}
Run Code Online (Sandbox Code Playgroud)

错误default((T))

; expected
Invalid expression term ')'
Type expected
Run Code Online (Sandbox Code Playgroud)

所以看起来解析器被双括号所困扰.

c#

3
推荐指数
2
解决办法
161
查看次数

如何重写现有对象的方法?

该对象是用它创建的reify,我需要重写它的方法之一。我发现的唯一方法是使用经典的 OO 装饰器和reify. 还有其他办法吗?

clojure decorator reify

3
推荐指数
1
解决办法
972
查看次数

ExecuteRegisteredAsyncTasks是否释放请求处理线程以服务其他请求?

我注意到ExecuteRegisteredAsyncTasks调用返回后的代码与该调用之前的代码在同一线程中执行。因此,我知道手动调用ExecuteRegisteredAsyncTasks不会释放请求处理线程来处理其他请求,并且应该仅自动调用此方法以获得扩展好处?

在msdn上是示例代码,但帮助无法回答此问题。

更新

就我而言,PageAsyncTasks我异步调用Web服务(使用Begin *和End *),所以我不使用线程池。

.net c# asp.net iis web-services

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