在查看从WCF库反映的一些代码时,我看到了用于创建异常的模式:
if(argument == null)
{
throw Error.ArgumentNull("argument");
}
Run Code Online (Sandbox Code Playgroud)
空参数是最简单的示例,其他类型的异常可通过静态错误类获得.
这种工厂模式的价值是多少?为什么不使用new
运算符并简单地调用ArgumentNullException
构造函数?
我想在字符串中执行不区分重音的替换.我希望'客户'匹配'cliënt',反之亦然.
我的代码看起来像这样:
Regex reg = new Regex("client");
string result = reg.Replace("here goes the content with client and cliënt", "replacementWith");
Run Code Online (Sandbox Code Playgroud)
那么,我如何确保'客户'匹配'客户'和'cliënt',反之亦然?
我正在尝试编写一种Dispose
具有抛出异常的潜力的方法.
try-finally
通过using
声明以一种模式调用dispose :
using(var widget = new Widget())
{
widget.DoYourThing();
}
Run Code Online (Sandbox Code Playgroud)
问题是如果Dispose
方法引发异常,它将替换在using
块体内可能引发的任何异常.通常,此异常不如在体内抛出的异常有用.
我想要的是以Dispose
这样的方式编写方法,即如果正在进行中的异常,它会吞下自己的异常.像下面这样的东西是理想的:
protected virtual void Dispose(bool disposing)
{
try
{
this.Shutdown();
}
catch(Exception)
{
this.Abort();
// Rethrow the exception if there is not one already in progress.
if(!Runtime.IsHandlingException)
{
throw;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么能提供这些信息吗?
我正在运行LocalDB来开发我的应用程序,并希望看到我的应用程序从其各种组件执行的SQL语句.我可以使用一种工具来捕获这些语句吗?
我的问题如下。来自网络背景,我没有问题可以做到这一点,但在 Python 桌面应用程序中,我真的看不出什么是根据 MVC 模式组织代码的最佳方式。
我想根据用户输入创建一个窗口,当按下按钮时,它会显示数据库中可用的类似条目。窗户是我的看法。
所以基本上这些是关系:
1)通讯控制器 --> 查看
控制器有一个视图实例,可以使用它公开的方法,例如 view.show_data()。我认为这是要走的路。
# Controller
my_view = View()
...
my_view.show_data(whatever_data)
Run Code Online (Sandbox Code Playgroud)
2)通讯视图--> 控制器
当用户插入一些文本时,必须触发控制器中的一个方法,以便它可以向模型询问数据库中的必要数据。问题是我不知道视图告诉控制器它必须触发那个方法的最佳方式是什么。
我的第一个想法是将控制器的引用传递给视图,并在视图上绑定事件,如下所示:
# Controller
my_view = View(self)
my_model = Model()
...
def on_user_input(self):
# process the input
user_input = ...
self.my_model.method_to_get_info(user_input)
Run Code Online (Sandbox Code Playgroud)
和观点:
# View
def __init__(self, controller):
self.controller_reference = controller
self.launch_gui()
self.config_binds()
def launch_gui(self):
# ... configure all the GUI itself
self.button = ...
def config_binds(self):
self.button.Bind(wx.EVT_BUTTON, self.controller_reference.on_user_input())
Run Code Online (Sandbox Code Playgroud)
但我认为这种“闭环”关系并不是一个非常干净的解决方案。视图在控制器中被引用,控制器在视图中被引用。我认为它在视图和控制器之间建立了紧密的关系。
有什么方法可以做到这一点?
我习惯用JavaScript动画元素.我发现用CSS3做起来更简单.
使用JavaScript如何检测CSS动画何时开始以及何时结束?有什么办法吗?
我有两个应用程序域,一个父级创建子域.在子域中,有一个MarshalByRef
对象,使用.NET Remoting进行通信.在父域中运行的对象作为应用程序函数的一部分调用远程对象的包装器:
public class ScanningTask : Task
{
private class Loader : MarshalByRef
{
public void Load(IEnumerable<string> paths)
{
...
}
public event EventHandler<LoadEventArgs> OnLoad;
}
public void RunTask()
{
var domain = AppDomain.CreateDomain("LoadDomain");
var loader = (Loader)domain.CreateInstanceFromAndUnwrap(
typeof(Loader).Assembly.Location,
typeof(Loader).FullName);
loader.Load(...);
AppDomain.Unload(domain);
}
}
Run Code Online (Sandbox Code Playgroud)
大多数代码都是为了简洁而删除
此Loader
对象公开了OnLoad
我想要在父域中捕获的事件.如果我只是添加一个事件处理程序委托,它会尝试序列化ScanningTask
到子域中并抛出一个关于它不可序列化的异常.
我真正想要的是让事件跨域传播.任何聪明的建议如何?
我的MSBuild构建脚本在所有开发机器上执行正常,但无法在构建服务器上运行,但Trunk构建除外.分支全部失败,并显示以下警告,指出问题的根源:
Target "ResolveProjectReferences":
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets (0,0):
warning : The referenced project '..\..\..\Class Library\
Company.BusinessModel\Company.BusinessModel.csproj' does not exist.
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么这个错误甚至出现 - 我已经验证了(相对于正在处理的csproj)引用的项目确实存在.将签出的代码复制(文件复制)到我的本地计算机并运行脚本,构建按预期完成.
这里有什么明显的错误吗?我能检查一下试图解决这个谜团吗?
编辑:
我已经尝试针对项目运行MSBuild单独提出构建错误,因此问题的其余部分不是问题,只是关于这个特定的.csproj文件.
在Visual Studio中创建项目时,用于项目的名称用于:
前两个值有些相关,因此从约定的角度来看它们保持相同是有意义的,但是使用命名空间的值会导致问题:
要么将项目名称设置为名称空间,导致文件路径非常长(当它们超过Windows的248长度限制时,通常会导致MSBuild出现问题,您会得到一个默认命名空间,它不符合正常的命名约定,然后必须使用"查找和替换"进行更改.
我已经解决了这个问题已有12年了,而且它没有变得更有趣.
是否有一些方法可以在您设置项目时单独设置这些值?