我们有一个按钮.Click事件由第三方框架处理,但是,框架在某种程度上是错误的.
我们想调试框架,但是,我们不知道相应的事件处理程序代码在哪里设置断点.如何一般"打破下一次点击事件",看看第三方框架处理这个点击的位置和方式?
我使用了高级参数处理来支持多个参数集.是否有任何预定义的变量或方法来确定哪个参数集用于调用脚本?
例如
if($parameterSet -eq "set1") { ... } elseif ($parameterSet -eq "set2") { ... }
Run Code Online (Sandbox Code Playgroud)
?
我们希望处理403错误,404错误,由于a导致的所有错误,MySpecialDomainException并为所有其他错误(包括IIS配置中的错误!)提供默认错误页面.所有错误都应该返回正确的Razor视图,ErrorController在视图前面有一个非常好的.例如,像这样:
public class ErrorController : Controller
{
public ViewResult NotFound () { return View(); }
public ViewResult Forbidden () { return View(); }
public ViewResult Default ()
{
var ex = ObtainExceptionFromSomewhere();
if(ex is MySpecialDomainException)
return View("MySpecialDomainException", new ErrorModel { Exception = ex });
return View("GeneralError", new ErrorModel { Exception = ex });
}
}
Run Code Online (Sandbox Code Playgroud)
目前,您可以在www上找到许多不同的方法,有些可能已经过时了.在这些:
Q1:使用ASP.NET MVC 5满足我们要求的推荐方法是什么?
我们还希望捕获IIS主机中发生的错误.Q2:为了防止IIS必须处理任何404,我们考虑添加一个匹配所有可能URL的默认路由 - 这是值得推荐的吗?最好注册IIS的404'?
问题3:甚至可以注册一个可以返回控制器的IIS错误页面,还是仅支持ASPX /静态HTML的IIS?
我通常知道"隐式捕获关闭"意味着什么,但是,今天我遇到了以下情况:
public static void Foo (Bar bar, Action<int> a, Action<int> b, int c)
{
bar.RegisterHandler(x => a(c)); // Implicitly captured closure: b
bar.RegisterHandler(x => b(c)); // Implicitly captured closure: a
}
Run Code Online (Sandbox Code Playgroud)
为什么我也暗中捕获其他动作?如果我评论两条线中的任何一条,另一条不会给我警告.有人知道ReSharper警告我的危险吗?
编辑:ReSharper 8.0.1
#Requires -Version 2.0
[CmdletBinding()]
Param(
[Parameter()] [string] $MyParam = $null
)
if($MyParam -eq $null) {
Write-Host 'works'
} else {
Write-Host 'does not work'
}
Run Code Online (Sandbox Code Playgroud)
输出"不起作用"=>看起来像字符串隐式地从空转换为空字符串?为什么?如何测试一个字符串是空的还是真的$ null?这应该是两个不同的值!
如何从snk文件中获取PublicKeyToken?使用命令行工具.我想过使用sn.exe但是找不到合适的参数.
我想使用PowerShell获取我的csproj文件中所有项目引用的列表.目前我有以下方法:
[xml]$csproj = Get-Content MyProject.csproj
$refs = $csproj.SelectNodes("//ProjectReference")
foreach($ref in $refs) {
# Later on output more useful information
Write-Host $ref.Name
}
Run Code Online (Sandbox Code Playgroud)
但是,尽管在给定的csproj文件中肯定存在ProjectReference元素,但脚本不会输出任何内容.以下是有效的:
[xml]$csproj = Get-Content MyProject.csproj
foreach($l in $csproj.Project.ItemGroup.ProjectReference) { Write-Host $l.Include }
Run Code Online (Sandbox Code Playgroud)
但是我以后也需要XPath +它为每个不包含ProjectReference的ItemGroup输出错误 - 那么如何使用SelectNodes函数使XPath工作?
示例XML(基本上任何带有项目引用的VS csproj文件都可以):
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup></ItemGroup>
<ItemGroup>
<ProjectReference Include="Text"></ProjectReference>
<ProjectReference Include="Text2"></ProjectReference>
</ItemGroup>
<ItemGroup></ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud) 是否有快速内置方法来检查是否IEnumerable<string>只包含不同的字符串?
一开始我开始:
var enumAsArray = enum.ToArray();
if (enumAsArray.Length != enumAsArray.Distinct().Count())
throw ...
Run Code Online (Sandbox Code Playgroud)
但是,这看起来像是O(2n) - 是吗?ToArray()可能是O(1)?
这看起来更快:
var set = new HashSet<string>();
foreach (var str in enum)
{
if (!set.Add(str))
throw ...
}
Run Code Online (Sandbox Code Playgroud)
这应该是O(n),但是,是否也有内置方式?
编辑:也许Distinct()在内部使用它?
解决方案: 在考虑了所有的评论和答案后,我为我的第二个解决方案编写了一个扩展方法,因为这似乎是最快的版本,也是最具可读性的:
public static bool ContainsDuplicates<T>(this IEnumerable<T> e)
{
var set = new HashSet<T>();
// ReSharper disable LoopCanBeConvertedToQuery
foreach (var item in e)
// ReSharper restore LoopCanBeConvertedToQuery
{
if (!set.Add(item))
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 是否有一个快捷方式围绕给定(选定)花括号的代码块?
VS 2015 + R#2016.1
我有两个课程,我不能以任何方式改变:
第1类:将a TextWriter作为构造函数参数并将其用作输出流.
第2类:提供方法WriteLine(string).
我需要一个适配器,这样Class1的所有输出都写入Class2.因此,我启动了一个适配器,它扩展TextWriter并缓冲传入的文本,并在新行到达时将其刷新到class2实例.
但是,TextWriter中有很多方法 - 我应该实现哪些方法?Class1中的输出仅为字符串.
根据MSDN,应该至少覆盖Write(char),但是,这强制我自己完成所有\ r \n新行处理...
Q1:你知道更好的方法来实现我的目标吗?Q2:如果不是,我应该覆盖哪些TextWriter方法以实现最小的实现工作.
c# ×4
powershell ×3
resharper ×2
.net ×1
asp.net-mvc ×1
closures ×1
collections ×1
debugging ×1
javascript ×1
parameters ×1
textwriter ×1
xml ×1
xpath ×1