小编Fre*_*eek的帖子

IFrame的默认宽度/高度

是否有任何规范指定IFrame的默认宽度/高度?

我测试的浏览器(FF,IE,Chrome)似乎使用300x150px,但我找不到任何规格.如果我遇到这种情况,我可以依赖这些值,还是应该总是明确地设置宽度/高度?

html iframe specifications

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

为什么在使用当前同步上下文启动任务时未设置ASP.NET HttpContext.Current

我正在玩一点.NET的异步功能,并提出了一个我无法解释的情况.在同步ASP.NET MVC控制器中执行以下代码时

var t = Task.Factory.StartNew(()=>{
        var ctx = System.Web.HttpContext.Current;
        //ctx == null here
},
    CancellationToken.None,
    TaskCreationOptions.None,
    TaskScheduler.FromCurrentSynchronizationContext()
);

t.Wait();
Run Code Online (Sandbox Code Playgroud)

ctxnull委托范围内.根据我的理解,当您使用TaskScheduler.FromCurrentSynchronizationContext()任务调度程序时,应该恢复上下文.那么为什么不在这里呢?(我可以,顺便说一下,看到委托在同一个线程上同步执行).

此外,从msdn,a TaskScheduler.FromCurrentSynchronizationContext()应该表现如下:

排队到返回的调度程序的所有Task实例将通过在该上下文上调用Post方法来执行.

但是,当我使用此代码时:

var wh = new AutoResetEvent(false);

SynchronizationContext.Current.Post(s=> {
    var ctx = System.Web.HttpContext.Current;
    //ctx is set here
    wh.Set();
    return;
},null);

wh.WaitOne();
Run Code Online (Sandbox Code Playgroud)

实际上设置了上下文.

我知道这个例子有点做作,但我真的很想了解如何增加我对.NET上异步编程的理解.

.net asp.net asynchronous task-parallel-library

20
推荐指数
2
解决办法
6850
查看次数

GZipStream机器依赖

我在.NET 4.0中遇到了一些奇怪的机器/操作系统相关的GZipStream行为.这是相关代码:

public static string Compress(string input) {
    using(var ms = new MemoryStream(Encoding.UTF8.GetBytes(input)))
    using(var os = new MemoryStream()) {
        using(var gz = new GZipStream(os,CompressionMode.Compress,true)) {
            ms.CopyTo(gz);
        }
        return string.Join("",os.ToArray().Select(b=>b.ToString("X2")));
    }
}
Run Code Online (Sandbox Code Playgroud)

运行压缩("freek")给了我

1F8B08000000000004004B2B4A4DCD06001E33909D05000000
Run Code Online (Sandbox Code Playgroud)

在Windows 7和

1F8B0800000000000400ECBD07601C499625262F6DCA7B7F4AF54AD7E074A10880601324D8904010ECC188CDE692EC1D69472329AB2A81CA6556655D661640CCED9DBCF7DE7BEFBDF7DE7BEFBDF7BA3B9D4E27F7DFFF3F5C6664016CF6CE4ADAC99E2180AAC81F3F7E7C1F3F22CEEB3C7FFBFF040000FFFF1E33909D05000000
Run Code Online (Sandbox Code Playgroud)

在Windows Server 2008R2上.两者都是64位.我希望结果是一样的.

当我解压缩任一结果时,两台机器都给出正确的结果.我已经发现在W7 ms.Length == 25而在W2K8R2 ms.Length == 128,但没有线索为什么.

这是怎么回事?

.net c# gzipstream .net-4.5

15
推荐指数
2
解决办法
1969
查看次数

C#编译器无法识别正在实现接口的类

以下代码无法编译(使用VS2010),我不明白为什么.编译器应该能够推断出List<TestClass>"兼容"(抱歉缺少一个更好的词)IEnumerable<ITest>,但不知何故它没有.我在这里错过了什么?


interface ITest {
    void Test();
}


class TestClass : ITest {
    public void Test() {
    }
}

class Program {
    static void Test(IEnumerable<ITest> tests) {
        foreach(var t in tests) {
            Console.WriteLine(t);
        }
    }
    static void Main(string[] args) {
        var lst = new List<TestClass>();

        Test(lst); // fails, why?

        Test(lst.Select(t=>t as ITest)); //success

        Test(lst.ToArray()); // success
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器给出了两个错误:

  1. 'ConsoleApplication1.Program.Test(System.Collections.Generic.IEnumerable <ConsoleApplication2.ITest>)'的最佳重载方法匹配有一些无效的参数

  2. 参数1:无法从'System.Collections.Generic.List <ConsoleApplication2.TestClass>'转换为'System.Collections.Generic.IEnumerable <ConsoleApplication2.ITest>'

.net c# generics .net-4.0 covariance

12
推荐指数
1
解决办法
825
查看次数

.NET中的DDD /聚合

我一直在阅读Evans关于DDD的书,并且正在考虑如何在.NET中实现聚合.目前,我只能想出一个方法; 在单独的类库中隔离聚合.然而,这看起来有点过分(我更喜欢将所有域对象保存在一个库中),我想知道是否有不同的方法?

1 lib/aggregate的原因如下:聚合根需要知道它负责对"子对象"的所有访问,聚合根也可以返回子对象作为其成员的结果.因此,这些子对象的成员(聚合根所需)不能公开.因此,您唯一的选择是将它们设置为内部(因为它们仍然需要由聚合根调用).但是,通过将所有聚合放在一个项目中,仍然可以从已获取子对象的其他域对象访问这些成员.这是不合需要的,因为它允许绕过聚合根.通过分离不同库中的所有聚合,解决了这个问题.

一些额外的信息:

我查看了DDD java示例代码,并将每个聚合(包括所有子对象的类)打包到另一个包中.只能从聚合根调用的成员没有访问修饰符(例如:) Delivery.updateOnRouting.在java中,没有访问修饰符的成员是包私有的(仅在同一个包中可用).所以这将是正确的行为.

.NET代码示例,但是,将所有的域对象在一个类库,然后使相应的成员公开.对我来说,这似乎是不正确的.

.net java architecture design-patterns domain-driven-design

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