我将在工作中启动一个新项目,并希望进入单元测试.我们将使用VS 2008,C#和ASP.NET MVC.我正在考虑使用NUnit或VS2008具有的内置测试项目,但我愿意研究其他建议.一个系统比另一个系统更好,或者比另一个更容易使用/理解?我希望将这个项目设置为我们未来发展努力的"最佳实践".
感谢您的帮助和建议!!
我经常在命名空间和该命名空间中的类之间进行命名冲突,并且除了添加随机前缀之外,在首先使用这些名称似乎有意义时,我们想知道处理此问题的最佳实践.
拥有一个Models.Technology命名空间似乎是有意义的,它有许多技术类(即武器,农业,回收技术)和一些相关的接口.我还决定在Technology命名空间中使用一个技术抽象类,所有技术都来自该类.
但是,这迫使我使用这样的代码:
public Technology.Technology research(Technology.Technology tech) {...}
Run Code Online (Sandbox Code Playgroud)
同样地:
public Building.Building build(int count) {...}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我没有命名我的命名空间技术,因为我在其他地方使用该术语作为可用技术列表的包装器......
(感兴趣的代码行是最后一行,其余的只是完整的代表)
使用下面的代码,我想拿VOTERS直到我超过所需的最大票数,但它在达到最大票数之前就停止了,所以我的选民人数比我想要的少了1个.
在LINQ中是否有一个干净的方式,我可以在它达到最大票数之前获得投票?我知道我可以添加一个选民或者在循环中执行此操作但我很好奇是否有一个很好的方法来使用LINQ.
var voters = new List<Person>
{
new Person("Alice", Vote.Yes ),
new Person("Bob", Vote.Yes),
new Person("Catherine", Vote.No),
new Person("Denzel", Vote.Yes),
new Person("Einrich", Vote.Abstain),
new Person("Frederica", Vote.Abstain),
new Person("Goeffried", Vote.Abstain),
};
voters.Single(c => c.Name == "Alice").Voices = 100;
voters.Single(c => c.Name == "Bob").Voices = 150;
voters.Single(c => c.Name == "Catherine").Voices = 99;
voters.Single(c => c.Name == "Denzel").Voices = 24;
voters.Single(c => c.Name == "Einrich").Voices = 52;
voters.Single(c => c.Name == "Frederica").Voices = 39;
voters.Single(c => c.Name == …Run Code Online (Sandbox Code Playgroud) 我想为我的小应用程序尝试MVC设计.
我有一个普通的Csharp类ViewBase,它扩展了UserControl.这是一个.cs文件.
我有多个类,我想扩展ViewBase.这些是实际的UserControl,因此它们在.cs文件和.xaml文件后面有一个代码.
但是,CSharp告诉我,对于这些类,它们的基类"与其他部分声明的不同".
我想做什么呢?我究竟做错了什么?
请注意,我没有修改我的XAML文件,所以他们仍然使用标签.
这是相关代码:
// This gives the error in question and ViewBase is underlined
// "Base class of LoginView differs from declared in other parts"
public partial class LoginView : ViewBase {
public LoginView(Shell shell, ControllerBase controller) : base(shell, controller) {
InitializeComponent();
}
}
// This one is a single .cs file
public abstract class ViewBase : UserControl {
public Shell Shell { get; set; }
public ControllerBase Controller { get; set; }
protected ViewBase(Shell shell, …Run Code Online (Sandbox Code Playgroud) 采用以下代码,Resharper告诉我voicesSoFar并voicesNeededMaximum导致"访问修改后的闭包".我读到了这些,但令我困惑的是Resharper建议通过在LINQ查询之前提取变量来解决这个问题.但这就是他们已经到了的地方!
如果我只是增加ReSharper的停止抱怨int voicesSoFar1 = voicesSoFar之后int voicesSoFar = 0.是否有一些我不理解的奇怪逻辑使得Resharper的建议正确无误?或者有没有办法安全地"访问修改后的闭包"在这样的情况下,而不会导致错误?
// this takes voters while we have less than 300 voices
int voicesSoFar = 0;
int voicesNeededMaximum = 300;
var eligibleVoters =
voters.TakeWhile((p => (voicesSoFar += p.Voices) < voicesNeededMaximum));
Run Code Online (Sandbox Code Playgroud) 我通常调用myControl.Focus()Loaded事件处理程序,但这似乎不适用于数据ListBox绑定到自定义对象列表.当我启动我的应用程序时,ListBox第一个项目被选中但焦点在其他地方.
我认为这可能是因为焦点是在数据绑定项加载到它之前设置的......但是下面的代码显示确实存在项目因为ctrlItemsCount显示数字8.
如何在这种情况下设置初始焦点,通常设置初始焦点的正确位置是什么?
private void onLoad(object sender, RoutedEventArgs e) {
if (ctrlCountries.Items.Count > 0) {
ctrlItemsCount.Text = ctrlCountries.Items.Count;
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我已将此代码移动到实际ListBox本身的加载事件.它几乎可以工作 - 现在重点是ListBox,但是我仍然需要在项目#0具有键盘光标之前按下键盘一次.换句话说,由于某种原因,焦点或光标在项目#0上方1个档位:
private void onCountriesLoaded(object sender, RoutedEventArgs e) {
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
Keyboard.Focus();
}
Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
linq ×2
wpf ×2
asp.net-mvc ×1
closures ×1
data-binding ×1
focus ×1
inheritance ×1
listbox ×1
namespaces ×1
nunit ×1
unit-testing ×1