我已声明了一个通用事件处理程序
public delegate void EventHandler();
Run Code Online (Sandbox Code Playgroud)
我添加了扩展方法'RaiseEvent':
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
当我使用典型语法定义事件时
public event EventHandler TypicalEvent;
Run Code Online (Sandbox Code Playgroud)
然后我可以调用使用扩展方法没有问题:
TypicalEvent.RaiseEvent();
Run Code Online (Sandbox Code Playgroud)
但是当我使用显式添加/删除语法定义事件时
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
Run Code Online (Sandbox Code Playgroud)
那么使用显式添加/删除语法定义的事件上不存在扩展方法:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在活动上,看看它说的原因:
事件'ExplicitEvent'只能出现在+ =或 - =的左侧
为什么使用典型语法定义的事件与使用显式添加/删除语法定义的事件不同,以及为什么扩展方法不适用于后者?
编辑:我发现我可以直接使用私有事件处理程序解决它:
_explicitEvent.RaiseEvent();
Run Code Online (Sandbox Code Playgroud)
但我仍然不明白为什么我不能直接使用事件,就像使用典型语法定义的事件一样.也许有人可以开导我.
调查一个bug,我发现这是由于c#中的这种奇怪:
sbyte[] foo = new sbyte[10];
object bar = foo;
Console.WriteLine("{0} {1} {2} {3}",
foo is sbyte[], foo is byte[], bar is sbyte[], bar is byte[]);
Run Code Online (Sandbox Code Playgroud)
输出为"True False True True",而我希望" bar is byte[]"返回False.显然酒吧既是一个byte[]又是一个sbyte[]?同样的情况对于其他符号/无符号类型,如Int32[]VS UInt32[],但不是说Int32[]VS Int64[].
谁能解释这种行为?这是在.NET 3.5中.
我很擅长使用moq.我正在创建一些单元测试用例HttpModule,一切正常,直到我点击static属性如下
this.applicationPath = (HttpRuntime.AppDomainAppVirtualPath.Length > 1) ? HttpRuntime.AppDomainAppVirtualPath : String.Empty;
Run Code Online (Sandbox Code Playgroud)
我不知道如何为static类和属性创建模拟HttpRuntime.AppDomainAppVirtualPath.的context,request并response已与示例代码我从起订量得到很好嘲笑.如果有人可以帮助我,我将不胜感激.
在安装了Skype的 Windows计算机上,它倾向于将所有电话格式的号码转换为Skype链接,因此您可以单击它以便在Skype上拨打电话.
问题是如何防止页面上的某个数字发生?
我添加这样的附件:
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(AttachmentPath);
msg.Attachments.Add(attachment);
Run Code Online (Sandbox Code Playgroud)
但是我想把它作为一个不同的名字附加,实际的文件名很长而且令人困惑我想把它作为"file.txt"附加,是否有一种简单的方法可以做到这一点,而无需复制文件?
.Net中的DataView和DataTable有什么区别?据我所知,DataView只是DataTable的错误表示.我什么时候应该使用DataView?
提前致谢.
[SoapRpcMethod(Action = "http://cyberindigo/TempWebService/InsertXML",
RequestNamespace = "http://cyberindigo/TempWebService/Request",
RequestElementName = "InsertXMLRequest",
ResponseNamespace = "http://cyberindigo/TempWebService/Response",
ResponseElementName = "InsertXMLResponse",
Use = System.Web.Services.Description.SoapBindingUse.Literal)]
[WebMethod]
public string InsertXML(string Jobs)
{
return "Hi";
}
Run Code Online (Sandbox Code Playgroud)
当我使用XMLHttpRequest访问它时出现问题它给出了以下错误服务器无法识别HTTP标头SOAPAction的值:http:// Cyberindigo/TempWebService/InsertXML
如果我在C#中编写一个实现IDisposable的类,为什么我不能简单地实现
public void Dispose(){ ... }
Run Code Online (Sandbox Code Playgroud)
处理释放任何非托管资源?
是
protected virtual void Dispose(bool disposing){ ... }
Run Code Online (Sandbox Code Playgroud)
总是必要的,有时是必要的,还是其他的东西?
我有一个用C#编写的Windows服务.我已经阅读了有关如何调试它的所有谷歌线程,但我仍然无法让它工作.我运行了"PathTo.NetFramework\InstallUtil.exe C:\ MyService.exe".它表示安装成功,但是当我运行"Services.msc"时,该服务根本不显示在任何地方.如果我进入任务管理器,有一个名为"MyService.vshost.exe"的进程.很确定不是它,因为它是一种服务,而不是一个过程.
如果我在运行Services.msc时应该看到该服务?(请记住,这一切都是在本地机器上完成的,没有任何服务器.
我正在运行VS2008.
这一切都是在我的本地机器上完成的,我没有服务器或访问任何服务器.另外,我甚至不知道服务做什么,我想调试它,所以我可以演练代码,看看它所有的作品(里面的服务代码,而不是服务本身如何 - 任何你Smarty的裤子可能建议我看一个模板).
这些都没有工作!每当我尝试一些东西时,我都会得到一些关于必须使用NET START或安装服务的消息.
我正在运行VS2008.
我键入:C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe C:\ dev\Restarter\bin\Release\Restarter.exe
我得到了这个:Microsoft(R).NET Framework安装实用程序版本2.0.50727.3053版权所有(c)Microsoft Corporation.版权所有.
运行事务安装.
开始安装的安装阶段.请参阅日志文件的内容以获取C:\ dev\Restarter\bin\Release\Restarter.exe程序集的进度.该文件位于C:\ dev\Restarter\bin\Release\EDT.Restar ter.InstallLog.安装程序集'C:\ dev\Restarter\bin\Release\Restarter.exe'.受影响的参数是:logtoconsole = assemblypath = C:\ dev\Restarter\bin\Release\Restarter.exe logfile = C:\ dev\Restarter\bin\Release\Restarter.InstallLog
安装阶段成功完成,提交阶段正在开始.请参阅日志文件的内容以获取C:\ dev\Restarter\bin\Release\Restarter.exe程序集的进度.该文件位于C:\ dev\Restarter\bin\Release\Restar ter.InstallLog.提交程序集'C:\ dev\Restarter\bin\Release\Restarter.exe'.受影响的参数是:logtoconsole = assemblypath = C:\ dev\Restarter\bin\Release\Restarter.exe logfile = C:\ dev\Restarter\bin\Release\Restarter.InstallLog
提交阶段成功完成.
事务处理安装已完成.
C:\ Program Files\Microsoft Visual Studio 9.0\VC>
然后我去了RUN - > Services.msc我什么都看不到.
任务管理器中有一个名为"Restarter.vshost.exe"的进程.
而已.
我只想安装和调试它.我知道它有效(因为它运行并且不会崩溃).但代码是由朋友编写的,我希望通过在调试模式下遍历它来理解底层代码.
我在OS X上安装了RabbitMQ服务器,并在命令行启动它.现在,我不应该如何阻止它运行?我做了之后:
sudo rabbitmq-server -detached
Run Code Online (Sandbox Code Playgroud)
我明白了:
Activating RabbitMQ plugins ...
0 plugins activated:
Run Code Online (Sandbox Code Playgroud)
就是这样.我该如何正确关闭它?在文档中,它提到了使用rabbitmqctl(1),但我不清楚这意味着什么.谢谢.
编辑:根据下面的评论,这是我运行的sudo rabbitmqctl stop:
(project_env)mlstr-1:Package mlstr$ sudo rabbitmqctl stop
Password:
Stopping and halting node rabbit@h002 ...
Error: unable to connect to node rabbit@h002: nodedown
DIAGNOSTICS
===========
nodes in question: [rabbit@h002]
hosts, their running nodes and ports:
- h002: [{rabbit,62428},{rabbitmqctl7069,64735}]
current node details:
- node name: rabbitmqctl7069@h002
- home dir: /opt/local/var/lib/rabbitmq
- cookie hash: q7VU0JjCd0VG7jOEF9Hf/g==
Run Code Online (Sandbox Code Playgroud)
为什么还有"当前节点"?我没有运行任何客户端程序,只有RabbitMQ服务器,这是否意味着服务器仍在运行?
c# ×8
.net ×3
javascript ×2
ado.net ×1
amqp ×1
arrays ×1
asp.net ×1
attachment ×1
css ×1
debugging ×1
dispose ×1
email ×1
events ×1
html ×1
idisposable ×1
jquery ×1
moq ×1
rabbitmq ×1
skype ×1
types ×1
unit-testing ×1
web-services ×1