是否有任何规范指定IFrame的默认宽度/高度?
我测试的浏览器(FF,IE,Chrome)似乎使用300x150px,但我找不到任何规格.如果我遇到这种情况,我可以依赖这些值,还是应该总是明确地设置宽度/高度?
我正在玩一点.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)
ctx是null委托范围内.根据我的理解,当您使用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 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,但没有线索为什么.
这是怎么回事?
以下代码无法编译(使用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)
编译器给出了两个错误:
'ConsoleApplication1.Program.Test(System.Collections.Generic.IEnumerable <ConsoleApplication2.ITest>)'的最佳重载方法匹配有一些无效的参数
参数1:无法从'System.Collections.Generic.List <ConsoleApplication2.TestClass>'转换为'System.Collections.Generic.IEnumerable <ConsoleApplication2.ITest>'
我一直在阅读Evans关于DDD的书,并且正在考虑如何在.NET中实现聚合.目前,我只能想出一个方法; 在单独的类库中隔离聚合.然而,这看起来有点过分(我更喜欢将所有域对象保存在一个库中),我想知道是否有不同的方法?
1 lib/aggregate的原因如下:聚合根需要知道它负责对"子对象"的所有访问,聚合根也可以返回子对象作为其成员的结果.因此,这些子对象的成员(聚合根所需)不能公开.因此,您唯一的选择是将它们设置为内部(因为它们仍然需要由聚合根调用).但是,通过将所有聚合放在一个项目中,仍然可以从已获取子对象的其他域对象访问这些成员.这是不合需要的,因为它允许绕过聚合根.通过分离不同库中的所有聚合,解决了这个问题.
一些额外的信息:
我查看了DDD java示例代码,并将每个聚合(包括所有子对象的类)打包到另一个包中.只能从聚合根调用的成员没有访问修饰符(例如:) Delivery.updateOnRouting.在java中,没有访问修饰符的成员是包私有的(仅在同一个包中可用).所以这将是正确的行为.
的.NET代码示例,但是,将所有的域对象在一个类库,然后使相应的成员公开.对我来说,这似乎是不正确的.
.net ×4
c# ×2
.net-4.0 ×1
.net-4.5 ×1
architecture ×1
asp.net ×1
asynchronous ×1
covariance ×1
generics ×1
gzipstream ×1
html ×1
iframe ×1
java ×1