在JavaScript中,this访问其属性时必须始终明确说明.例如:
function Frobber(x) {
this.x = x;
return this;
}
Frobber.prototype.frob = function () {
// wrong:
return x * x;
// right:
return this.x * this.x;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用with(this)(已被弃用且通常不赞成),但为什么this范围内的属性不是自动的?我认为这个设计决定必须有理由.
在C#或.net IL中是否有办法强制一个具有类型初始值设定项(静态构造函数)的类来加载自身,而不访问它的任何参数?
假设我上了课
public static class LogInitialization {
static LogInitialization() {
System.Console.WriteLine("Initialized");
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让这条线打印出来?
请注意,该类是静态的,因此我无法将其实例化以强制初始化,并且它没有公共成员,因此我无法访问它们以启动它.
在dynamic泛型类上实现动态分派,并且泛型类型参数是另一个类上的私有内部类时,运行时绑定程序会引发异常.
例如:
using System;
public abstract class Dispatcher<T> {
public T Call(object foo) { return CallDispatch((dynamic)foo); }
protected abstract T CallDispatch(int foo);
protected abstract T CallDispatch(string foo);
}
public class Program {
public static void Main() {
TypeFinder d = new TypeFinder();
Console.WriteLine(d.Call(0));
Console.WriteLine(d.Call(""));
}
private class TypeFinder : Dispatcher<CallType> {
protected override CallType CallDispatch(int foo) {
return CallType.Int;
}
protected override CallType CallDispatch(string foo) {
return CallType.String;
}
}
private enum CallType { Int, String }
} …Run Code Online (Sandbox Code Playgroud) 我有一个MVC项目的部分页面看起来像这样:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<div class="tab-window <%= Model.TargetClass %> <%= Model.TargetTab == Model.SelectedTab ? "selected" : "" %>"
data-window-url="/SomeUrl/Partial/<%= Model.TargetTab %>/"
<%= Model.TargetTab == Model.SelectedTab ? "data-content-loaded=\"true\"" : "" %>>
<% if (Model.TargetTab == Model.SelectedTab) {
Html.RenderPartial(Model.TargetTab as string, Model.Model as object);
} %>
</div>
Run Code Online (Sandbox Code Playgroud)
它的作用是打开另一个部分(名为in Model.TargetTab),Model.Model如果它是当前可见的选项卡,否则只需渲染一个空div(在需要时加载jQuery).
它被称为这样:
<% Html.RenderPartial("TabWindowContainer", new { TargetTab = "MyTabName", TargetClass = "my-tab-class", SelectedTab = Model.Tab, Model = Model }); %>
Run Code Online (Sandbox Code Playgroud)
这曾经工作过.
然后我改变了进入的值,Model它停止了工作.我改回来了,它仍然无法正常工作.要清楚,hg status当前不显示任何这些文件.
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'object' …
我现在已经看过这种模式了几次:
bool success = false;
try
{
DoSomething();
success = true;
}
finally
{
if (!success)
Rollback();
}
Run Code Online (Sandbox Code Playgroud)
而且我一直在想:为什么这比使用catch回滚更好?
try
{
DoSomething();
}
catch
{
Rollback();
throw;
}
Run Code Online (Sandbox Code Playgroud)
确保更改在失败时回滚的两种方法之间有什么区别?
什么是.net中的全局方法?我在谈论由该ModuleBuilder.DefineGlobalMethod方法创建的那些.
可以从C#或其他.net语言调用这些方法吗?
我们都知道正确验证电子邮件的正则表达式会非常复杂.但是,jQuery的验证插件有一个较短的正则表达式(由Scott Gonzalez提供),只有几行:
/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])
+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|
((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|
[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]
|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?
(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*
([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])
([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/
Run Code Online (Sandbox Code Playgroud)
与更为人熟知的怪物相比,为什么这么"简单"?是否存在一个正则表达式失败而另一个正式成功的情况(案例是有效还是无效的电子邮件)?
一个天真的类型系统会将对象存储为指向其类型的指针(其中包含许多有用的信息,如vtable,对象大小等),后跟其数据.如果.Net具有这样的类型系统,则object在32位系统上占用4个字节,在64位上占用8个字节.
我们可以看到它没有.对象开销是两个指针大小,另外,还有一个指针大小的"最小"大小.
那么object在幕后实际存储的内容是什么?
假设我有这个简单的类:
public class Pair {
public readonly object first;
public readonly object second;
public Pair(object first, object second) {
this.first = first;
this.second = second;
}
}
Run Code Online (Sandbox Code Playgroud)
生成对的循环图是不可能的.
你将如何创建一个类似的类,它仍然是不可变的,但可以某种方式用于生成循环图?
我在一个解决方案中有两个Web项目,我想使用msbuild和WebDeploy来部署它们(这通过CI服务器发生).
目前,我正在运行命令行:
C:\ProjectFolder>msbuild <solution>.sln
/p:Configuration=<Release>
/p:OutputPath=bin
/p:DeployOnBuild=True
/p:DeployTarget=MSDeployPublish
/p:MsDeployServiceUrl=https://<ServerUrl:port>/msdeploy.axd
/p:username=<user>
/p:password=<password>
/p:AllowUntrustedCertificate=True
/p:DeployIisAppPath=<SiteName>
/p:MSDeployPublishMethod=WMSVC
Run Code Online (Sandbox Code Playgroud)
这按预期部署了一个项目.但是我如何部署另一个呢?在这个命令行中没有任何地方我指定了一个项目名称 - 为什么它选择一个项目来部署另一个项目?
理想情况下,我可以使用相同的命令部署两个项目,例如
...
/p:Project=Project1
/p:DeployIisAppPath=<SiteName>/Project1
/p:Project=Project2
/p:DeployIisAppPath=<SiteName>/Project2
Run Code Online (Sandbox Code Playgroud)
但我怀疑这是可能的.或者,我只想知道如何在命令行中指定项目名称.
c# ×4
.net ×3
dynamic ×2
classloader ×1
clr ×1
compiler-bug ×1
cyclic-graph ×1
email ×1
immutability ×1
javascript ×1
jquery ×1
msbuild ×1
msdeploy ×1
regex ×1
transactions ×1
try-catch ×1
try-finally ×1