我正在尝试追踪代码中的错误.我把它煮成下面的片段.在下面的示例中,我有一个int网格(行列表),但我想找到具有1的列的索引.这个的实现是为每一行创建一个枚举器并逐步遍历每一列转而将调查员保持在一步.
class Program
{
static void Main(string[] args)
{
var ints = new List<List<int>> {
new List<int> {0, 0, 1}, // This row has a 1 at index 2
new List<int> {0, 1, 0}, // This row has a 1 at index 1
new List<int> {0, 0, 1} // This row also has a 1 at index 2
};
var result = IndexesWhereThereIsOneInTheColumn(ints);
Console.WriteLine(string.Join(", ", result)); // Expected: "1, 2"
Console.ReadKey();
}
private static IEnumerable<int> IndexesWhereThereIsOneInTheColumn(
IEnumerable<List<int>> myIntsGrid)
{
var …Run Code Online (Sandbox Code Playgroud) 在VS2015中,有一个有用的工具可用于查找对象的引用.然而,在我正在努力扩展这个树的意大利面条代码中有许多以[检测到周期]结束的叶子(例如A有对B的引用而B有对A的引用).例如:
有没有办法过滤出仅包含循环叶子的分支?或者在这里导出数据的方法?
在调试VS2012时,我发现我无法再访问变量值:
true.
我尝试过的:
重新启动Visual Studio
重新启动我的电脑
检查已加载的模块是否显示调试符号
卸载我昨天安装的TeamCity插件
在工具/选项/调试下查看任何明显的事情(并禁用其他已经正常工作的扩展)
编辑:我也尝试过创建一个新的解决方案.
我还注意到调用堆栈显示了几个空白行,我认为应该有外部方法名称(如上图所示) - 我不确定这是否相关,但值得一提.
我有一些插件作为DLL文件.我的应用程序加载DLL并运行正常.但是当我尝试删除旧插件并用新插件替换它时,它不允许我这样做.因为它已被应用程序加载.我发现通过使用appdomain,我们可以做到这一点.但我无法找到使用mef的解决方案.
我需要一个可以在mef上运行的代码.下面是我的代码,用于加载插件.
//Creating an instance of aggregate catalog. It aggregates other catalogs
var aggregateCatalog = new AggregateCatalog();
//Build the directory path where the parts will be available
var directoryPath = "Path to plugins folder";
//Load parts from the available dlls in the specified path using the directory catalog
var directoryCatalog = new DirectoryCatalog(directoryPath, "*.dll");
//Add to the aggregate catalog
aggregateCatalog.Catalogs.Add(directoryCatalog);
//Crete the composition container
var container = new CompositionContainer(aggregateCatalog);
// Composable parts are created here i.e. the Import and Export …Run Code Online (Sandbox Code Playgroud) 我经常发现自己写的东西像:
String.Format("{1}: {0}", reason, message);
Run Code Online (Sandbox Code Playgroud)
或类似的东西,但有更多的字符串占位符.
Resharper中是否有自动重构来更改占位符和参数的顺序?如果我试图手动更改顺序,我倾向于搞乱映射.
显然,上面的例子是微不足道的.我在现实中所做的经常是写下:
String.Format("{0}.{2} = {1}.{3} AND {0}.{4} = {1}.{5} AND {6}.{7} = {1}.{8}",
table1Alias, table2Alias, col1A, col2A, col1B, col2B, table3Alias, col3C, col2C);
Run Code Online (Sandbox Code Playgroud)
并且想到如果我能将table3Alias移到其他别名旁边的前面那会很棒.
(Resharper 7.1.3)
我正在为一位同事审查一些代码,并在单元测试类中遇到了一个测试,看起来如下:
// setup
Foo f = ...
FooToBarConverter ftb = ...
Bar b = ftb.Convert(f); // It is easier to create a Bar by converting it from a Foo than making one 'from scratch'
// test
systemUnderTest.DoSomething(bar);
// assert
Assert.IsTrue(...)
Run Code Online (Sandbox Code Playgroud)
很明显,这是一个集成测试,因为它正在测试FooToBarConverter以及被测系统,因为它是唯一涵盖DoSomething()方法的测试.我建议将此测试移至集成测试解决方案,但这会降低单元测试的代码覆盖率.我们的目标是100%的单元测试代码覆盖率(是的 - 我知道100%的覆盖率是达到目的的手段而非终端本身,100%覆盖的代码不一定是100%正确的代码).
如果我们将集成测试移出去,是否有理由创建单元测试以恢复覆盖范围?
或者我们是否针对100%单元测试覆盖率的错误做法?我们是否应该通过组合所有测试(甚至100%的目标)来实现100%的覆盖率?
谢谢.
编辑/ UPDATE:
这不是关于如何正确地测试被测系统的问题(我知道这不是单元测试的原因,我知道如何正确地将其转换为单元测试),也不是关于覆盖范围的问题FooToBarConverter.我希望对被测系统的代码覆盖率有所了解:对被测系统的集成测试是否足够?还是应该进行单元测试?
我有一系列数据结构,如:
abstract class Base {...}
class Foo : Base {...}
class Bar : Base {...}
Run Code Online (Sandbox Code Playgroud)
以及一个接受Base并根据它所依赖的子类转换它的方法:
void Convert(Base b) {
if (b is Foo)
// Do the Foo conversion
else if (b is Bar)
// Do the Bar conversion
...
Run Code Online (Sandbox Code Playgroud)
显然这是一个可怕的面向对象 - 转换方法必须知道Base的每个派生类,并且必须在每次扩展Base时进行更改.解决这个问题的'正常'OO方法是使每个派生类的Base负责转换自身,例如
abstract class Base {
abstract Converted Convert();
...}
class Foo : Base {
override Converted Convert(){...}
...}
class Bar : Base {
override Converted Convert(){...}
...}
Run Code Online (Sandbox Code Playgroud)
但是,在我编写的代码中,Base是一个纯数据结构(只有getter和setter - 没有逻辑),而且它在另一个我无权更改的程序集中.有没有一种方法可以更好地构造代码,而不强制Base的派生类具有逻辑?
谢谢
我在使用Visual Studio 2012时偶尔会出现错误.错误(如下所示)几乎没有任何关于出错的信息.似乎错误与源控制有某种关系,因为我通常在更改文件(并且文件被自动检出)或添加新内容时收到错误.
除了错误消息之外,似乎没有任何错误 - 源代码控制为我检出文件,我可以写入签出文件.
我已经检查了输出窗口,没有任何明显的东西可以显示出错的地方.我能做些什么来更好地了解出了什么问题?或者有其他人有同样的问题,知道如何解决它?

VS关于盒子信息:
Microsoft Visual Studio Premium 2012版本11.0.61030.00更新4 Microsoft .NET Framework版本4.5.50709
已安装版本:Premium
适用于Visual Studio 2012的LightSwitch 04941-004-0043007-02952适用于Visual Studio 2012的Microsoft LightSwitch
Office开发人员工具04941-004-0043007-02952 Microsoft Office开发人员工具
适用于Visual Studio 2012的团队资源管理器04941-004-0043007-02952适用于Visual Studio 2012的Microsoft团队资源管理器
Visual Basic 2012 04941-004-0043007-02952 Microsoft Visual Basic 2012
Visual C#2012 04941-004-0043007-02952 Microsoft Visual C#2012
Visual C++ 2012 04941-004-0043007-02952 Microsoft Visual C++ 2012
Visual F#2012 04941-004-0043007-02952 Microsoft Visual F#2012
Visual Studio 2012代码分析拼写检查程序04941-004-0043007-02952Microsoft®VisualStudio®2012代码分析拼写检查程序
部分国际CorrectSpell™拼写纠正系统©1993 Lernout&Hauspie Speech Products NV保留所有权利.
美国遗产®英语词典,第三版版权所有©1992 Houghton Mifflin Company.电子版由Lernout&Hauspie Speech Products NV授权.保留所有权利.
Visual Studio 2012 SharePoint开发人员工具04941-004-0043007-02952 Microsoft …
如果一个类没有任何虚方法,我认为继承类的任何方式都不会影响任何未明确引用该实例作为子类实例的代码,即
Subclass obj = new Subclass()
Run Code Online (Sandbox Code Playgroud)
而不是
BaseClass obj = new SubClass()
Run Code Online (Sandbox Code Playgroud)
因此,为什么sealed甚至存在?
如果你没有声明任何东西virtual(我认为在密封类中没有任何意义),它会阻止像(例如)a ListViewItem那样存储一些关于它代表什么的额外信息的代码"知道"该信息是在那里,与重写的方法不同,它对没有用该子类编写的代码没有影响.
序言 我一直在调查一个概念,我在下面发布的内容是我一直在努力的简化版本.如果你看一下并且想"这样做没有任何意义"那么可能是因为我没有任何意义 - 可能有更有效的方法来做到这一点.我只想尝试一下,因为它看起来很有趣.
我正在尝试使用反向波兰式实现在SQL中使用CLR自定义聚合来计算任意计算.我正在使用这些数据:
K | Amt | Instruction | Order
--+-----+-------------+------
A | 100 | Push | 1
A | 1 | Multiply | 2
A | 10 | Push | 3
A | 2 | Multiply | 4
A | | Add | 5
A | 1 | Push | 6
A | 3 | Multiply | 7
A | | Add | 8
Run Code Online (Sandbox Code Playgroud)
计算结果应该是123 ( = (100 * 1) + (10 * 2) + (1 …
c# ×6
class ×1
debugging ×1
dll ×1
enumerator ×1
inheritance ×1
linq ×1
mef ×1
memory-leaks ×1
oop ×1
profiler ×1
resharper ×1
sealed ×1
sql ×1
sqlclr ×1
unit-testing ×1