我安装了Visual Studio 2008 SP1,当我在Moq Framework中使用lambda表达式时它崩溃了.
起初我认为问题是Resharper ...但是现在我已经卸载它,VS 2008仍然崩溃.我每次都能复制这个问题.
我想也许它可能是其他一些导致问题的插件而不是VS 2008 ...但我不能确定.
那么我想要找到的是Visual Studio记录发生的崩溃的地方?
不幸的是我无法找到它...有没有人知道它是否存在,如果存在,在哪里看?
提前致谢!
我目前正在处理的代码库中充斥着硬编码值.
我将所有硬编码值视为代码气味,并尝试在可能的情况下消除它们......但是有些情况我不确定.
以下是我能想到的两个例子让我想知道最佳做法是什么:
1. MyTextBox.Text = someCondition ? "Yes" : "No"
2. double myPercentage = myValue / 100;
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,最好的做法是创建一个允许我在配置文件中执行MyHelper.Yes和MyHelper.No或者类似的东西的类(虽然它不太可能改变,谁知道是否有可能曾经是一个案例,其用法将区分大小写).
在第二种情况下,除非数学定律改变,否则找不到百分比的百分比不可能改变......但我仍然想知道是否有更好的方法.
任何人都可以建议一种适当的方式来处理这种硬编码吗?任何人都可以想到硬编码是可接受的做法吗?
我的代码看起来像这样:
Collection<NameValueCollection> optionInfoCollection = ....
List<NameValueCollection> optionInfoList = new List<NameValueCollection>();
optionInfoList = optionInfoCollection.ToList();
if(_isAlphabeticalSoting)
Sort optionInfoList
Run Code Online (Sandbox Code Playgroud)
我尝试了optionInfoList.Sort()但它无法正常工作.
我和Subversion一直在使用TortoiseSVN一段时间了.它非常容易使用,大多数时候我只使用Update和Commit函数....偶尔如果我需要追踪特定代码行的作者,我会使用Blame或Show Log.
最近,我犯了错误,直接将文件夹和文件从不同的分支复制到我正在工作的那个...并且在检查它时发现它破坏了东西,因为它检查了它来自我复制的分支他们来自.在那一点上,我发现需要做的是使用TortoiseSVN提供的命令来复制和导出文件夹,以便它们的引用保持正确.
所以它让我感到疑惑......对于使用Subversion的开发人员而言,还有哪些其他强大的命令对于帮助您解决问题或减少执行各种版本控制任务的工作量非常重要?
我目前正在修改一个有9种不同构造函数的类.总的来说,我认为这个类的设计非常糟糕...所以我想知道如果一个类有这么多构造函数的设计是不好的.
出现了一个问题,因为我最近在这个类中添加了两个构造函数,试图重构和重新设计一个类(下面代码中的SomeManager),这样它就是单元可测试的,并且不依赖于它的每个方法都是静态的.但是,因为其他构造函数在类的开头以下方便地隐藏了大约一百行,所以当我添加构造函数时,我没有发现它们.
现在发生的是调用这些其他构造函数的代码依赖于已经实例化的SomeManager类,因为它曾经是静态的......结果是一个空引用异常.
所以我的问题是如何解决这个问题?通过尝试减少构造函数的数量?通过使所有现有构造函数采用ISomeManager参数?
当然一个班级不需要9个构造函数!...哦,最重要的是这个文件中有6000行代码!
这是我正在讨论的构造函数的审查表示:
public MyManager()
: this(new SomeManager()){} //this one I added
public MyManager(ISomeManager someManager) //this one I added
{
this.someManager = someManager;
}
public MyManager(int id)
: this(GetSomeClass(id)) {}
public MyManager(SomeClass someClass)
: this(someClass, DateTime.Now){}
public MyManager(SomeClass someClass, DateTime someDate)
{
if (someClass != null)
myHelper = new MyHelper(someOtherClass, someDate, "some param");
}
public MyManager(SomeOtherClass someOtherClass)
: this(someOtherClass, DateTime.Now){}
public MyManager(SomeOtherClass someOtherClass, DateTime someDate)
{
myHelper = new MyHelper(someOtherClass, someDate, "some param");
}
public MyManager(YetAnotherClass yetAnotherClass) …
Run Code Online (Sandbox Code Playgroud) 我一直在阅读Moq的源代码,我遇到了以下单元测试:
Assert.Throws<ArgumentOutOfRangeException>(() => Times.AtLeast(0));
Run Code Online (Sandbox Code Playgroud)
而对于我的生活,我不记得究竟是什么()=>.我认为它与匿名方法或lambda有关.而且我确定我知道它的作用,我现在还记不清了......
有人能给我一个快速回答一个漂亮的noobish问题吗?
我最近注意到,当我创建私有方法,在传递给它们的对象中设置几个字段时,Resharper会提示一个提示,说明该方法可以是静态的.
这是我可能拥有的一种方法的大大简化的例子.
private void MakeStatusTheSame(MyClass mc, MySecondClass msc)
{
mc.Status = msc.Status;
}
Run Code Online (Sandbox Code Playgroud)
当我有这样的方法时,Resharper建议该方法可以是静态的.
我试图避免使公共方法静态,因为它们破坏了单元测试...但我不确定这同样适用于私有方法.
Resharper的建议是否是有效的最佳做法,还是应该将其关闭?
我在使用不显眼的ajax从联系我们表单发布数据时遇到了麻烦.
我的部分视图是这样的:
@model site.ViewModel.Home.ContactUsViewModel
@using (Ajax.BeginForm("_ContactUsPartial", "Home",
new AjaxOptions { UpdateTargetId = "result" }))
{
<fieldset>
<legend>Contact Us</legend>
@Html.ValidationSummary(true)
<div id="result"></div>
<div class="editor-label">
@Html.LabelFor(m => m.FullName)
@Html.ValidationMessageFor(m => m.FullName)</div>
<div class="editor-field">@Html.TextBoxFor(m => m.FullName)</div>
<!-- other fields from model -->
<input type="submit" value="Submit"/>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)
我的部分视图放在另一个页面上,如下所示:
@Html.Partial("_ContactUsPartial", new ContactUsViewModel());
Run Code Online (Sandbox Code Playgroud)
我的家庭控制器是这样的:
[HttpPost]
public ActionResult _ContactUsPartial(ContactUsViewModel viewModel)
{
if (ModelState.IsValid)
{
try
{
//send email
return Content("Thanks for your message!");
}
catch (Exception ex)
{
return Content("Problem sending the email.");
}
}
return …
Run Code Online (Sandbox Code Playgroud) 我的问题很模糊:o) - 但这是一个例子:
当我编写C代码时,我能够在出现故障时记录计数器的值:
<...>
for ( int i = 0 ; i < n ; i++ )
if ( SUCCESS != myCall())
Log( "Failure, i = %d", i );
<...>
Run Code Online (Sandbox Code Playgroud)
现在,使用异常,我得到这个:
try
{
<...>
for ( int i = 0 ; i < n ; i++ )
myCall();
<...>
}
catch ( Exception exception )
{
Log( "Failure ! Maybe in myCall() ? Don't know. i's value ? No clue." );
}
Run Code Online (Sandbox Code Playgroud)
当然,可以在try/catch语句之外声明"i"(这就是我正在做的事情).但我不喜欢它 - 我喜欢声明变量在哪里使用,而不是之前.
但也许我在这里遗漏了一些东西.你有什么优雅的解决方案吗?
预先感谢 !西尔万.
ADDED:myCall()是一个不起眼的API调用 …
我在我正在处理的代码库中遇到了一个switch语句,我正在试图弄清楚如何用更好的东西替换它,因为switch语句被认为是代码味道.但是,通过阅读有关替换switch 语句的 stackoverflow上的几篇文章,我似乎无法想到替换此特定switch语句的有效方法.
它让我想知道这个特定的switch语句是否正常,以及是否有特殊情况认为switch语句是合适的.
在我的情况下,我正在努力的代码(自然略微混淆)是这样的:
private MyType DoSomething(IDataRecord reader)
{
var p = new MyType
{
Id = (int)reader[idIndex],
Name = (string)reader[nameIndex]
}
switch ((string) reader[discountTypeIndex])
{
case "A":
p.DiscountType = DiscountType.Discountable;
break;
case "B":
p.DiscountType = DiscountType.Loss;
break;
case "O":
p.DiscountType = DiscountType.Other;
break;
}
return p;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议消除这种转换的方法吗?或者这是一个合适的开关?如果是,那么switch语句还有其他适当的用途吗?我真的很想知道它们的适用位置,所以我不会浪费太多时间来消除我遇到的每一个开关语句,因为它们在某些情况下被认为是一种气味.
更新:根据迈克尔的建议,我做了一些搜索这个逻辑的重复,发现有人在另一个类中创建了逻辑,有效地使整个switch语句变得多余.所以在这个特定代码的上下文中,switch语句是不必要的.但是,我的问题更多的是关于代码中switch语句的适当性以及我们是否应该总是尝试在找到它们时替换它们,所以在这种情况下我倾向于接受这个switch语句是合适的答案.
c# ×4
resharper ×2
ajaxform ×1
c#-3.0 ×1
class-design ×1
constructor ×1
crash ×1
exception ×1
function ×1
generic-list ×1
hard-coding ×1
logging ×1
plugins ×1
refactoring ×1
return-code ×1
sorting ×1
static ×1
svn ×1
tortoisesvn ×1