小编Dav*_*ten的帖子

浮点不准确的例子

你如何向仍然认为计算机是无限智能和准确的新鲜程序员和外行人解释浮点不准确?
你有一个最喜欢的例子或轶事似乎比一个精确但干燥的解释更好地理解这个想法吗?
这是如何在计算机科学课程中教授的?

floating-point floating-accuracy

29
推荐指数
3
解决办法
10万
查看次数

使用Reflection(DotNET)查找程序集中的所有命名空间

我有一个程序集(作为ReflectionOnly加载),我想找到这个程序集中的所有命名空间,所以我可以将它们转换为自动生成的源代码文件模板的"using"(VB中的"Imports")语句.

理想情况下,我只想将自己限制在顶级命名空间,而不是:

using System;
using System.Collections;
using System.Collections.Generic;
Run Code Online (Sandbox Code Playgroud)

你只会得到:

using System;
Run Code Online (Sandbox Code Playgroud)

我注意到System.Type类上有一个Namespace属性,但有没有更好的方法来收集程序集内的Namespaces,它不涉及迭代所有类型并剔除重复的命名空间字符串?

大卫,很有责任

c# vb.net reflection assemblies namespaces

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

解决装配,模糊的方式

这是设置:

纯粹的DotNET类库由非托管桌面应用程序加载.类库充当插件.这个插件加载了自己的小插件(所有DotNET类库),它通过将dll作为字节流读入内存来实现,然后

Assembly asm = Assembly.Load(COFF_Image);
Run Code Online (Sandbox Code Playgroud)

当那些小宝贝插件引用其他dll时会出现问题.由于它们是通过内存而不是直接从磁盘加载的,因此框架通常无法找到这些引用的程序集,因此无法加载它们.

我可以在我的项目中添加一个AssemblyResolver处理程序,我可以看到这些引用的程序集已经过去了.我对在磁盘上找到这些引用程序集的位置有一个相当好的想法,但是如何确保Assmebly I load是正确的?

简而言之,我如何可靠地从System.ResolveEventArgs.Name字段转到dll文件路径,假设我有一个这个dll可能隐藏的所有文件夹的列表?

c# assemblies resolveassemblyreference

11
推荐指数
1
解决办法
1998
查看次数

一组双打的Akima插值

假设我有一个双打数组,使用Akima插值对这个系列进行采样的好算法是什么?将这些数学描述翻译成代码我太愚蠢了.

// values is an array of doubles
// idx is the index of the left-hand value for the current interpolation
// t is the normalized parameter between values[idx] and values[idx+1]
// Don't worry about array bounds, I'll handle that separately.
public double InterpolateAkima(double[] values, int idx, double t)
{
  ...?
}
Run Code Online (Sandbox Code Playgroud)

c# interpolation spline

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

加入无序线段

我的算法生成一个(通常)数千个线段(所有2D)的列表,我需要将它们连接成大折线.这些生成的折线可能是封闭的或打开的,但它们永远不会自相交.线段不是定向的,即可能需要在线段可以连接到其邻居之前翻转线段.

找到这些折线的极快方法是什么?我必须实时做到这一点,所以任何花费超过-say- 10ms的东西都不是解决方案.

我在C#中这样做,但我正在寻找想法,而不是来源.

algorithm geometry

9
推荐指数
1
解决办法
3900
查看次数

用方法替换C#代码中的所有变量

我需要解析用户编写的C#代码片段,并用方法调用替换本地未定义的所有变量.即

public class Foo
{
  public dynamic Bar()
  {
     return Math.Min(x + width, maxWidth);
  }
}
Run Code Online (Sandbox Code Playgroud)

必须成为:

public class Foo
{
  public dynamic Bar()
  {
      return Math.Min(Resolve("x") + Resolve("width"), Resolve("maxWidth"));
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Microsoft.CodeAnalysis.CSharp和CSharpSyntaxTree来检查字符串,但它没有给我足够的信息来执行替换.或者如果确实如此,我不知道在哪里寻找它.我已粘贴下面的SyntaxTree布局.所有变量都以IdentifierName节点的形式出现,但我不知道如何区分不同的IdentifierNames.然后去哪儿?

CompilationUnit[0..99) {
 code:  public class Foo\n{\n  public dynamic Bar()\n  {\n    return Math.Min(x + width, maxWidth);\n  }\n}
 tokens: EndOfFileToken[] 
 nodes{
  ClassDeclaration[0..99) {
   code:  public class Foo\n{\n  public dynamic Bar()\n  {\n    return Math.Min(x + width, maxWidth);\n  }\n}
   tokens: PublicKeyword[public ] ClassKeyword[class ] IdentifierToken[Foo\n] OpenBraceToken[{\n] CloseBraceToken[}] 
   nodes{
    MethodDeclaration[21..98) {
     code: …
Run Code Online (Sandbox Code Playgroud)

c# code-analysis roslyn

9
推荐指数
1
解决办法
1113
查看次数

工具栏失败时的UI想法

当应用程序中的按钮数量超出工具栏UI的舒适区域时,该怎么办?我正在接近1000个按钮标记,并且没有减速的迹象.我当前的选项卡式工具栏UI现在已经远远超出了舒适区域.

我添加了一个动态工具栏(双击弹出),您键入一个关键短语,工具栏中填充了您可能一直在寻找的按钮.这与具有某种自动完成机制的许多命令行UI非常相似.这也是一个相当老式的解决方案.

您是否遇到过以独特/令人惊讶/有效的方式解决此问题的UI?跟踪最近用户操作的UI是否真的可以更快地访问所需的工具,或者他们经常猜错?允许用户自定义UI有多重要(根据我的经验,实际上很少有人这样做,但他们对此非常感兴趣).

(如果这超出了SO的范围,我很抱歉,这是我所知道的唯一提供快速有用答案的地方)


编辑:上传了我的典型标签工具栏的截图:Grasshopper Toolbar http://en.wiki.mcneel.com/content/upload/images/grasshopperUIExample.png

user-interface

8
推荐指数
2
解决办法
705
查看次数

C#GDI +/System.Drawing.Graphics - 创建缓冲区并手动blitting?

我正在创建一个处理非常大的图像文件的cad查看器,我正在尝试以尽可能高的帧速率和低内存占用来优化它.

它使用GDI +渲染到面板上.

目前的缺陷是图像渲染.我正在使用的一些文件参考图像特别大(8000x8000像素).我已经优化了内存使用量,只在它们变得可见时加载它们,并在它们不可用时将它们处理掉.这样可以减少程序内存耗尽的可能性,但可以防止图像过于频繁地加载和卸载; 但是渲染图像本身(context.DrawImage)仍然会带来非常大的开销.

我现在正在探索将图像blitting到某种较小缓冲区的方法,渲染这个(通常小得多)缓冲区,然后在缩放级别发生显着变化时刷新/重建它.

问题是,我无法在GDI中找到任何相关规定.任何人都可以建议我如何实现它?

c# graphics drawing gdi+ winforms

7
推荐指数
1
解决办法
1076
查看次数

使用非标准语言功能编译C#

我需要将用户类型的表达式编译成可以调用的.NET程序集.表达式语言(从应用程序的版本1继承)非常有限,几乎是有效的C#,但它确实有一些不寻常的属性.

我想在版本2中切换到完整的C#,但是我在使用Roslyn将特性转换为可编译的SyntaxTree时遇到了麻烦.目前我正试图弄清楚如何获得权力和因子来编译,即

double n = 1.5² / 0.9³ + 6!;
Run Code Online (Sandbox Code Playgroud)

必须转换成类似的东西:

double n = Pow(1.5, 2) / Pow(0.9, 3) + Factorial(6);
Run Code Online (Sandbox Code Playgroud)

但是,当我解析原始表达式时,它会立即在²字符处分解:

public static void TestLanguageAdditions()
{
  const string code = "double n = 1.5² / 0.9³ + 6!;";

  var syntaxTree = CSharpSyntaxTree.ParseText(code);
  var syntaxRoot = syntaxTree.GetRoot();

  var sb = new StringBuilder();
  sb.AppendLine(code);
  sb.AppendLine();

  foreach (var node in syntaxRoot.DescendantNodes())
  {
    var span = node.FullSpan;
    var spanLine = 
      new string(' ', span.Start) + 
      new string('?', span.Length);

    spanLine …
Run Code Online (Sandbox Code Playgroud)

c# roslyn

7
推荐指数
0
解决办法
145
查看次数

更改Sandcastle中的图标

有谁知道是否可以更改已编译的chm文件中的TOC Treeview(紫色书籍)中的图标SandCastle

我搜索了SandCastle安装文件夹但找不到这些特殊的图标.

我现在想,也许他们原生于chm文件......

sandcastle icons

6
推荐指数
0
解决办法
255
查看次数