小编Mic*_*tum的帖子

具有复杂逻辑的多个构造函数

在C#中,如果你有多个构造函数,你可以这样做:

public MyClass(Guid inputId, string inputName){
    // do something
}

public MyClass(Guid inputId): this(inputId, "foo") {}
Run Code Online (Sandbox Code Playgroud)

这个想法当然是代码重用.但是,当需要一些复杂的逻辑时,最好的方法是什么?说我想要这个构造函数:

public MyClass(MyOtherClass inputObject)
{
    Guid inputId = inputObject.ID;
    MyThirdClass mc = inputObject.CreateHelper();
    string inputText = mc.Text;
    mc.Dispose();
    // Need to call the main Constructor now with inputId and inputText
 }
Run Code Online (Sandbox Code Playgroud)

这里需要说明的是,我需要创建一个对象具有使用后丢弃.(澄清:不是立即,但我必须调用Dispose()而不是等待垃圾收集)

但是,如果我在重载的构造函数中添加一些代码,我没有看到再次调用基础构造函数的方法.有没有办法从一个重载的内部调用基础构造函数?

或者是否可以使用

public MyClass(MyOtherClass inputObject): this(inputObject.ID,
                                               inputObject.CreateHelper().Text) 
{}
Run Code Online (Sandbox Code Playgroud)

这会自动从CreateHelper()中释放生成的对象吗?

编辑:谢谢到目前为止.两个问题:我不控制MyOtherClass,我没有扩展方法(只有.NET 3.0 ......).我确实控制了自己的类,因为我刚刚开始编写它,如果有一个好的方法,我没有问题重构构造函数.

.net c#

6
推荐指数
1
解决办法
8277
查看次数

在Internet Explorer中调试网站

我有一个非常慢的网站,使用它时"感觉"非常糟糕.服务器很好,这是一个客户端问题,我认为因为太多的JavaScript或图像请求,但由于它不是我自己的网站,我想知道是否有一种方法可以在IE中显示和分析页面.

在Firefox中,我会使用Firebug,Y!Slow和Web Developer扩展来查看所有JavaScript,CSS,图像和其他请求,AJAX请求等,但在IE上我没有看到任何问题.我知道我可以使用Firefox,但是这个页面在FF中比在IE中效果更好,所以我想知道在IE中是否有一些特定的开发插件.

编辑:感谢您提出的许多建议!选择一个作为"接受"的太多好答案,但我会看看建议的各种工具.

internet-explorer profiling

6
推荐指数
2
解决办法
1955
查看次数

system.io.fileloadexception故障排除

我有一个.net 3.5 WinForms应用程序在我的机器上运行正常,但在另一台机器上它会立即崩溃与system.io.fileloadexception.不幸的是,没有关于哪个文件无法加载的详细信息,所以我不知道问题究竟在哪里.

我相信我知道它可能是哪一个(SQL Server Compact版本),但在我漫无目的地捕获之前,我想知道是否有一种正确的方法来找出导致fileloadexception的原因,而不是使用来自SysInternals的FileMon.

唯一的错误消息是:

EventType clr20r3,P1 myapplication.exe,P2 2.1.0.0,P3 490eca78,P4 myapplication,P5 2.1.0.0,P6 490eca78,P7 2e,P8 21,P9 system.io.fileloadexception,P10 NIL.

.net

6
推荐指数
2
解决办法
9665
查看次数

覆盖Equals()但不检查所有字段 - 会发生什么?

如果我重写Equals和GetHashCode,我该如何决定要比较哪些字段?如果我有两个对象,每个对应两个字段会发生什么,但Equals只检查一个字段?

换句话说,假设我有这个类:

class EqualsTestClass
{
    public string MyDescription { get; set; }
    public int MyId { get; set; }

    public override bool Equals(object obj)
    {
        EqualsTestClass eq = obj as EqualsTestClass;
        if(eq == null) {
            return false;
        } else {
            return MyId.Equals(eq.MyId);
        }
    }

    public override int GetHashCode()
    {
        int hashcode = 23;
        return (hashcode * 17) + MyId.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它们具有相同的MyId,我认为两个对象相等.因此,如果Id相等但描述不同,它们仍然被认为是相等的.

我只是想知道这种方法的缺陷是什么?当然,像这样的结构将按预期运行:

        List<EqualsTestClass> test = new List<EqualsTestClass>();

        EqualsTestClass eq1 = new EqualsTestClass();
        eq1.MyId = 1;
        eq1.MyDescription = "Des1";

        EqualsTestClass …
Run Code Online (Sandbox Code Playgroud)

.net c#

6
推荐指数
1
解决办法
523
查看次数

生成一些数据的防篡改签名?

我有一个数据.目前,它是一个XML文件,但架构可能会发生变化.所以我们暂时假设它是一个C#类.

当我将数据存储在磁盘或数据库中时,我需要添加某种签名或指纹或校验和或其他任何内容,以确保没有人可以修改数据.警告:即使是有权访问所有源代码的管理员或开发人员也不应该修改它.

我假设由于具有完全代码访问权限的人可以轻松地创建新签名(签名需要以编程方式完成,因此无需手动密码短语输入),签名在某种程度上需要包含一些其他数据.理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串.

我的一般方法是使用对称加密.我从所有字段生成哈希,即SHA-512,然后使用哈希作为密码加密该哈希和我的附加数据以获取我的签名.要解密,我的函数会根据文件中的实际数据生成哈希值,并尝试解密签名.这不会是防篡改的,因为很容易生成签名日期和附加信息仍然完整的签名.

由于我不是该领域的专家,我相信我正在尝试重新发明轮子,而且它不是一个非常好的轮子.我只是想知道是否有一些标准方法?我相信我的部分请求是不可能的(毕竟,如果有人控制整个环境,那个人也会控制系统时间),但我仍然想知道这通常是如何解决的?

.net c#

6
推荐指数
1
解决办法
2329
查看次数

ASP.net MVC中的ASP.net AJAX有什么意义?

所以ASP.net MVC默认同时附带JQuery和ASP.net Ajax.虽然JQuery的用例很明显且很多,但我想知道ASP.net Ajax的意义是什么?如果我只是让我的控制器动作返回JSON,我不需要它吗?此外,任何"旧的"ASP.net控件只有在你使用Webforms视图引擎时才能工作(我想我想使用另一个,但这不是重点).

ASP.net Ajax在MVC环境中提供什么?

asp.net asp.net-mvc

6
推荐指数
2
解决办法
187
查看次数

SubSonic 3.0中的关系和延迟加载

我现在正在玩SubSonic 3.0,它看起来非常简单(除了我还需要在SimpleRepository和ActiveRecord之间做出决定,但这是另一个故事).

但是,由于文档有点稀疏,我不确定它是否支持外部关系和延迟加载.基本上,我有一个课程发布:

public class Posting {
    [SubSonicPrimaryKey]
    public Guid InternalId { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public DateTime? PostingDate { get; set; }
    public List<Comment> Comments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和一个评论:

public class Comment
{
    public string Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Posting有一个评论列表.我能以某种方式告诉SubSonic这两者是否相关?那就是我保存帖子时可以自动保存所有评论?更重要的是,当我加载一个帖子时,我希望评论列表最初是空的,并且在某些时候说"好的,请立即填充".

我知道我可以在Code中手动管理它,但我想知道SubSonic是否可以在我做手动工作之前做到这一点.

.net subsonic orm subsonic3

6
推荐指数
1
解决办法
2290
查看次数

在应用程序中实现多个屏幕

奇怪的问题,但一个让我困惑的问题.在我们有终端和DOS的过去,应用程序通常只有一个"窗口",这是一个全屏幕.当人们切换功能时,没有打开新窗口的概念,而是覆盖了主窗口的内容.所以只有一个主窗口,但是在其中呈现了多个屏幕.

如何在现代应用程序(WinForms或WPF)中创建类似的东西?

似乎有两种方法:

  • 拥有多个Windows.这是通常的方法,通常允许用户同时使用多个窗口是有意义的,但这可能不是必需/期望的.使用ShowDialog()而不是Show()是制作第二个窗口模态的常用方法.
  • 只有一个窗口,但有一个TabControl.隐藏选项卡并以编程方式切换它们.这接近于"一个窗口,多个屏幕"的行为,但自然它会变得混乱,因为你在同一个Form类中拥有所有控件(虽然有人可能会认为这会强制控件的正确命名.另外,可以建议使用部分类和每个屏幕一个.cs)

我想知道是否有更好的方法?基本上是"看,我不关心边框样式/图标或主菜单条等内容.我想要的就是将这个屏幕渲染到这个区域".有点像ASP.net主页,其中实际页面只定义被渲染到占位符的内容.

是否有一些适当的机制来做这样的事情?

或者整个方法有问题吗?

.net c# wpf xaml winforms

6
推荐指数
1
解决办法
2048
查看次数

jQuery UI对话框,添加按钮旁边的元素

关于jQuery UI Dialog的一个好处是它有一个Buttons选项,可以自动正确定位它们.我只是想知道:我可以以某种方式在按钮旁放置元素吗?我有一个Ajax-Loader gif,我想在对话框的左下角显示,而按钮保持在右下方?

我知道我可以删除按钮并在HTML中手动创建它们,但由于jQuery已经为我提供了定位和样式,我想保留该功能,如果它有意义的话.

    $("#newProjectDialog").dialog({
        bgiframe: true,
        resizable: false,
        width: 400,
        modal: true,
        overlay: {
            backgroundColor: '#000',
            opacity: 0.5
        },
        buttons: {
            'Create': function() {
                $("#ajax-loader").show();
                // Make the Ajax Call and whatever else is needed
                $(this).dialog('destroy');
            },
            Cancel: function() {
                $(this).dialog('destroy');
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-ui

6
推荐指数
1
解决办法
6463
查看次数

NTFS备用数据流 - 好还是坏?

我想为文件存储一些与应用程序相关的元数据,而NTFS备用数据流(AltDS)允许我将这些元数据直接存储在文件上,而不是存储在单独的数据库中.

我觉得这不是一个好主意.我知道这只适用于NTFS,但至少如果用户将文件复制/移动到非NTFS驱动器,他们会从Windows获得警告(是的,是的,没有人读警告,我知道) -

但是,在文件上存储其他数据可能会变得非常浪费,因为即使卸载了我的应用程序,AltDS也会保留.就像十年前人们使用"注册表清理工具"在卸载程序后从注册表中删除无用的条目,以使他们的系统运行得更快(当清理器清理得太多时不太稳定......).

我只是想知道它们可以合理地用于什么?它们应该完全留给Microsoft Apps使用吗?或者是否有某种类型的应用程序可以使用它们的某些共同策略(除了恶意软件)?

编辑:只是为了澄清我的想法.我正处于为自己编写小型文档管理系统的早期阶段.因为我想有自由移动文件,我想在文件上存储元数据,这样如果我移动/重命名/修改它们,我的应用程序仍然可以识别它们.它可以是整个元数据,也可以只是与单独数据库一起使用的GUID.

总结给出的要点:

优点:

  • 元数据随文件移动,因此无需通过散列或文件名识别它
  • 适用于所有FileTypes,甚至是.txt文件,在这些文件中无法将任何数据存储在文件本身中

缺点:

  • 仅适用于NTFS,它可能不是未来Windows版本中的默认文件系统
    • 虽然如果他们一起获得WinFS,MS不会自动转换它们会让我感到惊讶
  • 即使卸载了我的应用程序,AltDS也会保留
  • 隐私问题
  • 脆弱
    • 大多数USB棒都是FAT32.许多私有文件服务器都是Linux.从Internet下载文件应该只传输文件而不传输流.简而言之:丢失它们很容易.

architecture ntfs

6
推荐指数
2
解决办法
3655
查看次数