小编Nol*_*rin的帖子

XAML或C#代码隐藏

我不喜欢使用XAML.我更喜欢用C#编写所有代码,但我认为我做错了.

在哪些情况下,最好使用XAML,何时使用C#?你有什么经历?

c# wpf xaml code-behind

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

哈希树结构

我刚刚在我的项目中遇到了一个场景,我需要比较不同的树对象与已知实例的相等性,并且考虑到在任意树上运行的某种散列算法将非常有用.

以下面的树为例:

        O
       / \
      /   \
     O     O
    /|\    |
   / | \   |
  O  O  O  O
          / \
         /   \
        O     O

其中每个O表示树的节点,是一个任意对象,具有相关的哈希函数.所以问题简化为:给定树结构节点的哈希码和已知结构,什么是计算整个树的(相对)无冲突哈希码的不错算法?

关于散列函数属性的一些注意事项:

  • 散列函数应该取决于树中每个节点的哈希码及其位置.
  • 重新排序节点的子节点明显更改生成的哈希码.
  • 反映树的任何部分明显更改生成的哈希代码

如果它有帮助,我在我的项目中使用C#4.0,虽然我主要是寻找理论解决方案,所以伪代码,描述或其他命令式语言的代码都可以.


UPDATE

嗯,这是我自己提出的解决方案.这里的几个答案对它有很大帮助.

每个节点(子树/叶节点)具有以下散列函数:

public override int GetHashCode()
{
    int hashCode = unchecked((this.Symbol.GetHashCode() * 31 +
        this.Value.GetHashCode()));
    for (int i = 0; i < this.Children.Count; i++)
        hashCode = unchecked(hashCode * 31 + this.Children[i].GetHashCode());
    return hashCode;
}
Run Code Online (Sandbox Code Playgroud)

正如我所看到的,这个方法的好处是,哈希码可以被缓存,只有当节点或其后代之一发生变化时才会重新计算.(感谢vatine和Jason Orendorff指出这一点).

无论如何,如果人们可以在这里评论我建议的解决方案,我将不胜感激 - 如果它做得很好,那么很好,否则任何可能的改进都会受到欢迎.

algorithm tree hash data-structures

44
推荐指数
4
解决办法
2万
查看次数

什么是Java中的模拟对象?

我想知道Java中的模拟对象是什么.我们为什么要创建它们以及它们的用途是什么?

java unit-testing mocking

43
推荐指数
3
解决办法
6万
查看次数

dotNet中是否存在DirectoryInfo.GetFiles/Directory.GetDirectories的异步版本?

dotNet中是否存在DirectoryInfo.GetFiles/Directory.GetDirectories的异步版本?我想在F#异步块中使用它们,并且拥有一个可以使用AsyncCallbacks调用的版本会很好.

问题是我试图吮吸一堆目录,可能是在慢速网络连接上的SMB挂载上,我不希望一堆线程池线程在等待网络读取时可能正在做其他工作.

.net f# asynchronous directoryinfo async-workflow

40
推荐指数
4
解决办法
2万
查看次数

我应该如何防守?

我正在使用一个用于创建数据库连接的小例程:

之前

public DbConnection GetConnection(String connectionName)
{
   ConnectionStringSettings cs= ConfigurationManager.ConnectionStrings[connectionName];
   DbProviderFactory factory = DbProviderFactories.GetFactory(cs.ProviderName);
   DbConnection conn = factory.CreateConnection();
   conn.ConnectionString = cs.ConnectionString;
   conn.Open();

   return conn;
}
Run Code Online (Sandbox Code Playgroud)

然后我开始研究.NET框架文档,看看各种事物的记录行为是什么,看看我是否可以处理它们.

例如:

ConfigurationManager.ConnectionStrings...
Run Code Online (Sandbox Code Playgroud)

文件说,打电话的ConnectionStrings抛出一个ConfigurationErrorException如果无法检索集合.在这种情况下,我无法处理此异常,所以我会放手.


下一部分是ConnectionStrings的实际索引,以查找connectionName:

...ConnectionStrings[connectionName];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ConnectionStrings文档说如果找不到连接名,该属性将返回null.我可以检查是否发生了这种情况,并抛出一个例外,让某人高兴他们给了一个无效的connectionName:

ConnectionStringSettings cs= 
      ConfigurationManager.ConnectionStrings[connectionName];
if (cs == null)
   throw new ArgumentException("Could not find connection string \""+connectionName+"\"");
Run Code Online (Sandbox Code Playgroud)

我重复同样的练习:

DbProviderFactory factory = 
      DbProviderFactories.GetFactory(cs.ProviderName);
Run Code Online (Sandbox Code Playgroud)

GetFactory方法对如果指定一家工厂发生了什么没有文档ProviderName找不到.它没有记录返回null,但我仍然可以防御,并检查 null:

DbProviderFactory factory = …
Run Code Online (Sandbox Code Playgroud)

c# defensive-programming exception-handling

38
推荐指数
4
解决办法
2448
查看次数

Code Golf:倒数游戏

挑战

这是一项任务,灵感来自着名的英国电视游戏节目Countdown.即使不了解游戏,挑战也应该非常明确,但随时可以要求澄清.

如果你想看到这款游戏的动态片段,请查看此YouTube视频片段.它拥有1997年美妙的已故理查德怀特利.

您将获得6个数字,从集{1,2,3,4,5,6,8,9,10,25,50,75,100}中随机选择,以及100到999之间的随机目标数.目的是使用六个给定的数字和四个常用的算术运算(加法,减法,乘法,除法;遍及有理数)来生成目标 - 或尽可能接近任一侧.每个数字最多只能使用一次,而每个算术运算符可以使用任意次数(包括零).请注意,使用多少个数并不重要.

编写一个函数,它接受目标数和6个数字的集合(可以表示为列表/集合/数组/序列),并以任何标准数字符号(例如中缀,前缀,后缀)返回解决方案.该函数必须始终将最接近的结果返回给目标,并且必须在标准PC上运行最多1分钟.请注意,在存在多个解决方案的情况下,任何单个解决方案就足够了.

例子:

  • {50,100,4,2,2,4},目标203,
    例如100*2 + 2 +(4/4)(精确),
    例如(100 + 50)*4*2 /(4 + 2)(精确)

  • {25,4,9,2,3,10},目标465
    例如(25 + 10 - 4)*(9*2-3)(确切)

  • {9,8,10,5,9,7},目标241
    例如((10 + 9)*9*7)+ 8)/ 5 (确切)

  • {3,7,6,2,1,7},目标824
    例如((7*3)-1)*6-2)*7 (= 826;偏2)

规则

除了在问题陈述中提到的,没有进一步的限制.您可以使用任何标准语言编写函数(不需要标准I/O).一如既往的目标是用最少数量的代码来解决任务.

说,我可能不会简单地用最短的代码接受答案.我还将关注代码的优雅和算法的时间复杂度!

我的解决方案

当我找到空闲时间时,我正在尝试使用F#解决方案 - 当我有东西时会将它发布在这里!


格式

请以下列格式发布所有答案,以便于比较:

语言

字符数:???

完全混淆的功能:

(code here)
Run Code Online (Sandbox Code Playgroud)

清除(理想评论)功能:

(code here)
Run Code Online (Sandbox Code Playgroud)

关于算法/聪明的快捷方式的任何注释.


algorithm math code-golf permutation

36
推荐指数
2
解决办法
5771
查看次数

在C#中生成随机值

如何使用RandomC#中的类生成随机的Int64和UInt64值?

c# random int64 long-integer

32
推荐指数
5
解决办法
3万
查看次数

我应该如何在Windows上创建自定义图形控制台/终端?

Windows控制台界面(思考cmd窗口)对用户来说是一个非常简单的GUI.然而,处理渲染,用户输入和滚动的效率水平非常高.用于创建此接口的方法无疑与传统桌面GUI的方法完全不同.

我有兴趣为Windows创建自己的自定义控制台/终端,最好使用基于C#和.NET的技术(例如托管GDI +或WPF).作为一个起点,我非常希望重新创建标准的简单Windows shell.然后,我可以扩展内容并从中添加功能.

我正在寻找有关如何创建这样的控制台UI的一般指导,但一些具体要点包括:

  • 我应该使用什么样的渲染模型?渲染循环?部分更新(如WPF)?WinForms模型(不确定这是如何工作的)?

  • 渲染模型中使用了哪种缓存?

  • 如何加载字体以及如何呈现它们?它们是标准的TrueType字体,位图字体还是其他什么?

  • 滚动如何有效地执行?

  • 您认为可能与之相关的任何其他内容!

事实上,对内置Windows控制台UI(甚至是高级Linux终端UI)如何做这些事情以及如何模仿它们的任何解释都是理想的.

编辑:要清楚,我真的想从头开始完成这项工作.基于像GDI +或WPF这样的图形框架,但不多了.

.net c# windows console graphics

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

如何在Windows 7中与cygwin建立符号链接

最近我测试了使用本机代码C/C++编写Android应用程序.问题在于使用Android NDK时进行符号链接.经过一些谷歌搜索,有人说使用cygwin.我现在安装了它.请告诉我如何在Windows 7中与cygwin建立符号链接.

提前致谢.

symlink cygwin android-ndk

30
推荐指数
2
解决办法
4万
查看次数

用于.NET的矩阵库

我正在为.NET/C#寻找一个好的(经过良好测试,功能齐全,界面友好的)矩阵库.我在这里的主要要求只是它应该是免费的(我不特别在意它是否是这种情况下的开源)并且最好支持稀疏矩阵运算.强制性要求是所有基本操作(例如乘法,换位,反演)以及寻找特征值和特征向量.用于发现特征值的数值而非/以及分析方法的实现,特别是用于稀疏矩阵的Lanczos算法,将是非常优选的,因为我将要处理的矩阵非常大(长度为10,000向上),因为正方形,也相当稀疏.这么说,我可能会在那里要求一点,所以对合理完整的矩阵库的任何建议都会很棒.

现在我知道Python有一两个有用的库用于这样的任务(即NumPy/SciPy),但遗憾的是,该领域似乎缺乏.NET.

稍微搜索了以下.NET的库,我可以使用它:

但是,由于我没有使用任何这些库或其他任何经验(并且没有足够的时间在任何情况下正确地检查每个库),我非常感谢这里有人可以讨论他们关于各种库的建议,他们的优点/缺点,特别是关于我的用途的适用性,以及他们的一般经验.

求助于MatLab总是一个选择,但不是首选,因为如果我可以直接将矩阵数学与我的程序集成,那将更加方便.

.net math matrix sparse-matrix

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