小编Twi*_*bit的帖子

如何比较两个.NET对象图的差异?

在我们的客户端/服务器应用程序中,我们一直在使用BinaryFormatter进行序列化过程.出于性能原因,我们尝试迁移到protobuf-net(http://code.google.com/p/protobuf-net/).

我们的软件在客户端和服务器之间传输大量图表.

现在我正在寻找一种方法来确保使用protobuf序列化和反序列化的数据与通常由BinaryFormatter处理的数据完全相同.

逐位比较很简单:我使用BinaryFormatter序列化到文件.使用BinaryFormatter再次反序列化此文件.然后我使用ProtoBuf序列化到一个文件中.使用该文件中的ProtoBuf进行反序列化.使用BinaryFormatter再次序列化到文件中.

然后我可以简单地将该文件与原始文件进行比较.

但是,这两个文件不是100%相等.所以现在我需要找到一种方法来追踪差异.

是否有一些工具可以显示由BinaryFormatter序列化的数据?或者您是否知道其他帮助者进行深入比较并告诉我差异在哪里?

使用XMLSerializer并比较两个XML文件是不可能的,因为BinaryFormatter能够序列化比XMLSerializer更多的数据 - 即使没有明确标记字段.

谢谢,TH

.net c# serialization protobuf-net

10
推荐指数
2
解决办法
1897
查看次数

在javascript匿名方法中访问复制的整数变量

我是一名C#开发人员,习惯于在C#中使用闭包.目前我必须使用匿名javascript函数并遇到以下代码段的问题:

    function ClosureTest() {
    var funcArray = new Array();

    var i = 0;
    while (i < 2) {
        var contextCopy = i;

        funcArray[i] = function() { alert(contextCopy); return false; };

        i++;
    }

    funcArray[0]();
    funcArray[1]();
}
Run Code Online (Sandbox Code Playgroud)

我希望第一个funcArray()电话说0,第二个说1.然而,他们都说1.怎么可能?

通过写作,var contextCopy = i我确保我创建了i-variable 的副本.然后,在每次迭代中,我创建一个全新的函数指针.每个函数都指自己的副本i,即contextCopy.但是,由于某些原因,两个创建的函数都引用相同的contextCopy变量.

这在javascript中如何工作?

javascript closures function

7
推荐指数
2
解决办法
4839
查看次数

Windows 7 64Bit上的.NET COM Interop令我头疼

到目前为止.NET COM互操作总是很好用.自从我升级到Windows 7后,我不再使用我的.NET COM对象了.

我的COM对象很简单:


namespace Crap
{
    [ComVisible(true)]
    [Guid("2134685b-6e22-49ef-a046-74e187ed0d21")]
    [ClassInterface(ClassInterfaceType.None)]
    public class MyClass : IMyClass
    {

        public MyClass()
        {}

        public void Test()
        {
            MessageBox.Show("Finally got in here.");
        }

    }
}



namespace Crap
{
    [Guid("1234685b-6e22-49ef-a046-74e187ed0d21")]
    public interface IMyClass
    {

    }
}


程序集也标记为ComVisible.

我使用注册程序集

regasm /codebase /tlb "path"
Run Code Online (Sandbox Code Playgroud)

注册成功(管理员模式).我试过了regasm 32和64bit.两次我都收到错误

"ActiveX组件无法使用此vbscript创建对象Crap.MyClass":


dim objReg
Set objReg = CreateObject("Crap.MyClass")
MsgBox typename(objReg)

fuslogvw也没有给我任何提示.COM对象在我的Vista 32 Bit机器上完美运行.

我不明白为什么我无法谷歌解决这个问题的解决方案..我真的是唯一遇到过这个问题的人吗?

看OleView我看到我的对象已成功注册.我也能够创建其他COM对象..它只适用于我自己的对象.

谢谢你,凯文

.net com interop windows-7-x64

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

WPF - 使用MVVM基于模型的不同状态禁用和启用不同控件的优雅方法

我正在为以下问题寻找一个优雅的解决方案.

假设我们有一个具有以下布尔属性的(View)模型:

  • Α
  • Beta版
  • 伽玛
  • 三角洲

接下来,我在表面上有5个控件,只有在满足基于这些属性的条件时才能看到它们.当然,只要更新其中一个属性,就应该立即传播更改:

  • ControlA - > Alpha &&(Beta || Gamma)
  • ControlB - > Delta
  • ControlC - > Delta || Beta版
  • ControlD - > Gamma && Alpha && Delta
  • ControlE - > Alpha || 伽玛

到目前为止我提出的唯一解决方案是使用MultiValueConverters.

ControlA的示例:

<ControlA>
   <ControlA.Visibility>
      <MultiBinding Converter={StaticResource ControlAVisibilityConverter}>
          <Binding Path="Alpha"/>
          <Binding Path="Beta"/>
          <Binding Path="Gamma"/>
      </MultiBinding>
   </ControlA.Visibility>
</ControlA>
Run Code Online (Sandbox Code Playgroud)

此ControlAVisibilityConverter检查条件"Alpha &&(Beta || Gamma)"并返回适当的值.

它确实有用......好吧..但也许你可以想出一个更优雅的解决方案?

谢谢TwinHabit

.net wpf converter mvvm multibinding

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

在解析 XAML 之前将静态 ResourceDictionary 添加到 UserControls

我有一个 WPF 控件,我想在我的 WinForms 应用程序(使用 ElementHost)的多个位置(=> 此控件的多个实例)中使用它。

此外,我希望我的 UserControl 的所有实例共享一个 ResourceDictionary 的单个实例。

在 WPF 应用程序中,我将通过在应用程序资源中合并我的 ResourceDictionary 来实现这一点。

但是,我不想在我的 WinForms 应用程序中创建 WPF 应用程序实例。相反,我正在寻找另一种方式。

我找到了一个解决方案,但我希望您知道一种不需要任何代码的更好方法:

    public static class StaticRDProvider
{
    static ResourceDictionary rd;
    static StaticRDProvider()
    {
        var uri = new Uri("WpfControls;Component/GlobalResourceDictionary.xaml", UriKind.Relative);
        rd = (ResourceDictionary) Application.LoadComponent(uri);
    }

    public static ResourceDictionary GetDictionary
    {
        get { return rd; }
    }
}
Run Code Online (Sandbox Code Playgroud)

用户控件.xaml.cs:

    public partial class MyCustomUserControl : UserControl
{
    public MyCustomUserControl()
    {
        Resources.MergedDictionaries.Add(StaticRDProvider.GetDictionary);

        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

那个有效。但我更喜欢只适用于 XAML 的解决方案。另外我希望能够使用静态资源。因此,在控件初始化后将静态 ResourceDictionary 添加到 Controls MergedDictionaries 不是一个选项。 …

.net wpf resourcedictionary

5
推荐指数
1
解决办法
2942
查看次数