小编Hay*_*ach的帖子

如何从.NET程序集中读取数组初始化值

如何读取值,让我们说:'99'来自包含此代码的程序集

using Sytem; 

public class Class1
{
    public Class1() {
        // array initializer, want to read '99', '100'... from assembly
        var a = new double[,] { { 1, 2, 3 }, { 99, 100, 101 } };
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

到目前为止我做了什么

ILDASM中的方法:

.method /*06000001*/ public hidebysig specialname rtspecialname 
        instance void  .ctor() cil managed
// SIG: 20 00 01
{
  // Method begins at RVA 0x2080
  // Code size       29 (0x1d)
  .maxstack  3
  .locals /*11000001*/ init ([0] float64[0...,0...] …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection il .net-assembly

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

.NET 4.0中的Array.Sort()发生了什么?TrySZSort()走了吗?

我想知道为什么下面的代码片段没有给出预期的结果?它对一个不太小的随机数组进行排序,并使用3种不同的方法.我期待速度如此:

  1. Array.Sort() - 我从.NET 2.0中回忆起使用本机TrySZSort函数的速度最快
  2. 使用自定义Comparer类降序排序
  3. lambda表达式排序.

代码:

class DescComparer : IComparer<double> {
    // simple comparison 
    // (yes, its not exactly correct ...)
    public int Compare(double x, double y) {
        return (x > y) ? -1 : 1; 
    }
}
static void Main(string[] args) {
    Stopwatch sw = new Stopwatch(); 
    Random rand = new Random(); 
    DescComparer comparer = new DescComparer();
    double[] a = new double[1000000]; 
    for (int r = 0; r < 20; r++) {

        // init array
        for (int …
Run Code Online (Sandbox Code Playgroud)

.net sorting comparison performance

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

resouce resx文件中的强命名程序集引用

场景

GreatLib.dll的供应商部署了一个自定义控件。它正在客户Winforms应用程序中使用。GreatLib具有很强的命名能力,并公开了一些类型。当这些类型用作客户窗体中的公共属性时,它们也可以在Windows窗体设计器中使用。这是麻烦开始的地方:

设计人员将在表单的资源文件中为所有这些类型创建项目,并在这些项目中序列化其default(?)值。由于GreatLib是严格命名的,因此引用将包含程序集的完全限定名称。(我认为这就是Resgen所做的事情?)。这些项目可能如下所示:

<data name="vector3Control1.value" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
    AAEAAAD/////AQAAAAAAAAAMAgAAAFRJTE51bWVyaWNzLCBWZXJzaW9uPTQuMi41MzM4LjQ4MDIxLCBD
    dWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPThkOWJmNTBlZjg1NDczNGQFAQAAABpJTE51bWVy
    aWNzLkRyYXdpbmcuVmVjdG9yMwMAAAADbV94A21feQNtX3oAAAALCwsCAAAAAAAAAAAAAAAAAAAACw==
</value>
</data>
Run Code Online (Sandbox Code Playgroud)

设计器在Form.Designer.cs文件中生成一些与此类似的代码,以便读取资源项:

this.vector3Control1.value = ((ILNumerics.Drawing.Vector3)(resources.GetObject("vector3Control1.value")));
Run Code Online (Sandbox Code Playgroud)

问题

供应商提供了对GreatLib的更新,客户将旧版本替换为新版本。但是资源文件将保持不变!因此,我们可以在Designer.cs代码上获得InvalidCastExeption,或者-如果不再找到旧程序集-则是FileNotFoundException。

建议使用哪种方式处理resx文件中的强名称?

通过使用完全防止它们

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Run Code Online (Sandbox Code Playgroud)

?还是按照HansPassant的建议在每次更新时手动转换base64数据?

resources strongname windows-forms-designer visual-studio winforms

5
推荐指数
0
解决办法
230
查看次数

从外部源导入和语法高亮代码

我不是前端开发人员,并且一直在努力让 highlight.js 做我想做的事。需要在博客中很好地显示代码。好的,它完美地工作,因为它呈现了我发布的代码

<pre><code>...</code></pre>
Run Code Online (Sandbox Code Playgroud)

...使用所选的样式非常漂亮和丰富多彩,例如idea.css。我已经准备好了所有样式和 highlight.pack.js 可以放入目录中。

但是在这些标签之间粘贴整个程序太麻烦了!如果代码可以保留在其文件中,则它可以更干净地重用于其他事物。

什么是最短和最优雅的方法(如果可能,不加载任何外部库)让它myCode.py从这些标签之间的同一目录中的python文件中提取代码?

该库的主要参考资料在这里

javascript jquery frontend syntax-highlighting highlight.js

4
推荐指数
1
解决办法
701
查看次数