小编Ray*_*Ray的帖子

如何在保持意大利面条代码的同时保存我的理智

只是想听听一些建议(和舒适......),这将帮助我控制一些复杂的意大利面条代码 - 这是由多个程序员(通常从不相遇)长时间开发的代码.解决方案的功能只是相互补充.

通常我倾向于看到两种程序员:

  1. "害怕死亡的程序员" - 那些家伙不会碰任何他们不需要的东西.他们可能会使用快速而肮脏的修复程序完成维护任务,这将使下一个程序员开始寻找他们的家庭地址;-)

    专业人士:
    它有效

    缺点:
    你希望你再也不会看到这个代码..

  2. "教师" - 那些可能会重写整个代码,同时完全翻新其逻辑.

    专业人士:
    嗯,有人必须做肮脏的工作......

    缺点:
    需要更长的时间,可能其中一个最重要的功能将从产品中神奇地消失

从程序员生活中这个黑暗的一面听到你的个人经历会很高兴.

我特别好奇听到任何理论/实践建议,这将有助于我深入了解意大利面条维护任务而不会感到如此痛苦.

maintenance

19
推荐指数
5
解决办法
1807
查看次数

不允许使用属性设置器时抛出什么异常?

我有一个具有虚拟属性的基类:

public virtual string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后我有一个派生类,只覆盖属性的getter

public override string Name
{
    get { return "Fixed Name"; }
}
Run Code Online (Sandbox Code Playgroud)

问题是这只会覆盖吸气剂.如果有人调用setter,则会调用基类setter,并且调用者不会知道它无效.

所以我想我会做类似的事情:

public override string Name
{
    get { return "Fixed Name"; }
    set { throw new Exception(); } //which exception type?
}
Run Code Online (Sandbox Code Playgroud)

所以两个(相关问题):

  1. 我有更好的模式可供使用吗?
  2. 如果我应该使用上面的模式,使用什么例外?

编辑:为什么一个例外优先于另一个例外的一些原因是好的.我的同事和我在NotSupported和之间有同样的论点InvalidOperation.

.net c# inheritance properties

19
推荐指数
2
解决办法
3706
查看次数

SQL Server 2005 Reporting Services的条件可见性和分页符

我知道SQL 2005中有条件可见性和分页符的错误,但我想知道是否有人提出了解决方法.

我有一个具有条件可见性表达式的表,我需要在表的末尾分页.

  • 如果我将PageBreakAtEnd属性设置为true.无论如何都会被忽略.删除可见性条件,它的工作原理.
  • 如果我将表放在一个矩形内,该矩形在表上具有条件可见性,并且表上有分页符.结果相同.分页属性将被忽略.
  • 如果我使用PageBreakAtEnd属性和具有可见性条件的表设置矩形,那么即使未显示表格,我仍然会收到分页符.

关于尝试什么的任何其他想法?我差不多需要单独的报告,而不是条件可见性:(

编辑:@Josh:那有同样的问题.如果第二个表具有条件可见性,则它不起作用.如果它没有可见性表达式,那么我会一直得到分页符.

@ Erick:我真的希望这是答案,但不幸的是它不起作用.当可见性表达式计算为隐藏时,矩形将存在很大的差距(我可以使用),当它评估为可见时,分页符仍然不起作用.

sql-server-2005 reporting-services

18
推荐指数
1
解决办法
2万
查看次数

如何将宏用于命令行参数以调试.NET项目?

在Visual Studio Debug属性页面(对于.NET 4项目),我希望能够在Build Events中指定宏,例如$(OutDir).但它不起作用,宏不会被替换.

不起作用

它只是不受支持吗?有工作吗?

.net macros command-line visual-studio

18
推荐指数
1
解决办法
3254
查看次数

Visual Studio安装项目 - 每用户注册表设置

我正在尝试维护一个安装项目Visual Studio 2003(是的,这是一个遗留应用程序).我们目前遇到的问题是我们需要为HKCU计算机上的每个用户编写注册表项.它们需要存在HKCU而不是HKLM因为它们是默认的用户设置,并且它们确实会改变每个用户.我的感觉是

  1. 这是不可能的
  2. 这不是安装程序应该做的事情,而是应用程序应该做的事情(毕竟在安装后创建用户配置文件时会发生什么?).

考虑到这一点,我仍然希望在应用程序中尽可能少地进行更改,所以我的问题是,是否可以为Visual Studio 2003安装项目中的每个用户添加注册表项?

而且,目前该项目列出了五个注册表根键(HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,和用户/机器配置单元).我对用户root密钥一无所知,也没有看过User/Machine Hive.任何人都可以告诉我他们是什么?也许他们可以解决我上面的问题.

windows registry installation visual-studio

17
推荐指数
2
解决办法
6398
查看次数

如果ItemGroup包含项目,如何进行MSBuild Condition测试?

这应该很简单,但我找不到如何做到这一点(或者可能不可能).

在MSBuild中,我有一个ItemGroup,它是一个文件列表.我想只在特定文件在该ItemGroup中时才执行任务

就像是:

<Copy Condition="@(Files) <contains> C:\MyFile.txt" .... />
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?最好不要编写自定义任务.

编辑:文件列表仅与条件有关.否则它与任务无关.

msbuild conditional-statements

16
推荐指数
1
解决办法
6857
查看次数

Moq.Mock <Expression <Func <T,bool >>>() - 如何使用Moq将表达式设置到模拟中

我已经阅读了很多关于这个主题的其他QA,我仍然无法找到问题的解决方案,所以我决定公开我的案例.

我有这个界面

public interface IRepository<T> where T : class, IEntity 
{
    IQueryable<T> Find(Expression<Func<T, bool>> predicate);
    T FindIncluding(int id, params Expression<Func<T, object>>[] includeProperties);
}
Run Code Online (Sandbox Code Playgroud)

这是包含我想要设置的Mock的方法的基本结构

public PeopleController CreatePeopleController()
{
    var mockUnitofWork = new Mock<IUnitOfWork>();
    var mockPeopleRepository = new Mock<IRepository<Person>>();

    mockPeopleRepository.Setup(r=>r.Find().Returns(new Person(){});
    mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
    return new PeopleController(mockUnitofWork.Object);
}
Run Code Online (Sandbox Code Playgroud)

我一直试图用这种方式设置模拟:

public PeopleController CreatePeopleController()
{
    var mockUnitofWork = new Mock<IUnitOfWork>();
    var mockPeopleRepository = new Mock<IRepository<Person>>();

    mockPeopleRepository.Setup(r=>r.Find(It.isAny<Expression<Func<Person,bool>>>()).Single()).Returns(new Person(){});
    mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
    return new PeopleController(mockUnitofWork.Object);
}
Run Code Online (Sandbox Code Playgroud)

但系统总是抛出相同的异常"System.NotSupportedException:Expression引用一个不属于模拟对象的方法......"

另外我想补充说我正在使用MSTest和Moq

我知道使用Expression设置模拟并不容易,不推荐,但这对我来说非常重要因为"查找"是我在我的应用程序中大量使用的方法

.net tdd unit-testing moq mocking

15
推荐指数
2
解决办法
8829
查看次数

删除未使用代码的最佳实践

我想知道人们最好的做法是删除未使用的代码.就个人而言,我喜欢删除(不只是评论)任何当前没有使用的东西.但我不确定要走多远.

以此为例(尽管我对一般性讨论感兴趣).在我的项目中,我有十几个UserControls.对于后来获得的功能,我在其中一个UserControl上实现了几个方法和属性.附加代码不是特定于该功能,但需要支持它.以后它可能会有用.

  • 我应该删除代码,因为我们目前还没有使用它,代码越少,读取就越容易吗?问题是,未来的开发人员如何知道这项工作已经完成?
  • 或者我应该把它保留在那里,所以如果他们以后需要使用它,另一个开发人员可以轻松找到它(他们不会考虑通过源代码控制来查看是否有人这样做并删除它)?
  • 还是有其他选择吗?

这同样适用于当前未使用的UserControl.我应该删除它们还是保留它们?

编辑:不言而喻(或者我认为会这样)我们正在使用源代码控制.

c#

14
推荐指数
3
解决办法
2245
查看次数

如何使用DocumentPaginator打印时打印预览?

我正在使用我从DocumentPaginator派生的类(见下文)来打印来自WPF应用程序的简单(仅文本)报告.我已经准备好了所有内容都能正确打印,但如何在打印之前进行打印预览?我有一种感觉,我需要使用DocumentViewer,但我无法弄清楚如何.

这是我的Paginator类:

public class RowPaginator : DocumentPaginator
{
    private int rows;
    private Size pageSize;
    private int rowsPerPage;

    public RowPaginator(int rows)
    {
        this.rows = rows;
    }

    public override DocumentPage GetPage(int pageNumber)
    {
        int currentRow = rowsPerPage * pageNumber;
        int rowsToPrint = Math.Min(rowsPerPage, rows - (rowsPerPage * pageNumber - 1));
        var page = new PageElementRenderer(pageNumber + 1, PageCount, currentRow, rowsToPrint)
                       {
                           Width = PageSize.Width,
                           Height = PageSize.Height
                       };
        page.Measure(PageSize);
        page.Arrange(new Rect(new Point(0, 0), PageSize));
        return new DocumentPage(page);
    }

    public override …
Run Code Online (Sandbox Code Playgroud)

.net c# printing wpf

14
推荐指数
2
解决办法
3万
查看次数

具有私有setter的XmlSerializer和Collection属性

说我有一个像这样的简单课程

[Serializeable]
public class MyClass
{
    public MyClass()
    {
       this.MyCollection = new List<int>();
    }


    public List<int> MyCollection { get; private set;}
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用XmlSerializer反序列化,我会收到一条错误消息,指出MyCollection是只读的,无法分配给.但是我不想公开setter,因为如果类的用户分配了它会导致各种问题.FxCop正确地警告:收集属性应该是只读的

但是在社区页面底部添加的内容是这样的:

XmlSerializer了解只读集合对于XmlSerializer,集合属性不必是可读写的,以便正确地序列化和反序列化内容.XmlSerializer将在实现ICollection或IEnumerable的集合属性上查找名为Add的方法,并在反序列化所有者类型的实例时使用该方法填充集合.

然而,它似乎并非如此(因为我得到InvalidOperationException).我能做什么遵循保持属性设置器私有的最佳实践,同时仍允许我使用XmlSerializer?

.net xml-serialization

14
推荐指数
1
解决办法
4567
查看次数