小编Pau*_*och的帖子

使用运行时类型创建通用 Func 委托

我需要调用一个泛型方法,该方法将泛型 Func 作为其参数之一,其中 Type 参数仅在运行时已知。这部分代码是一个对象映射器,它在源对象和目标对象之间映射属性。ViewModelBase 是被视为“目标”对象的类的根。

我要调用的方法(在 ObjectMapperBuilder 上定义)具有以下签名:

public static ObjectMapperBuilder<TTarget> Create(
    Type sourceType, 
    MappingDirection direction, 
    Func<TTarget, IDictionary<String, object>> getDictionaryFromTarget = null
);
Run Code Online (Sandbox Code Playgroud)

在我的基类中,我想调用上面的方法,但使用最派生的类型作为我的类型参数:

public ViewModelBase {
    private ConcurrentDictionary<string, object> _propertyValues;

    public ViewModelBase (object sourceObject) {
        Type tTarget = this.GetType();

        // 1. How do I create the Func? All it does is return a private member.
        // This is wrong because it uses a compile-time generic parameter.
        Func<TTarget,IDictionary<String,object>> myFunc = (vm) => vm._propertyValues;

        // 2. Ho do I call …
Run Code Online (Sandbox Code Playgroud)

c# generics reflection delegates

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

Powershell DSC在哪里找到模块代码?

我在Archive DSC模块中发现了一个错误(MSFT_ArchiveResource.psm1).在复制代码,在ISE中调试代码并找出需要修复的两行之后,我想对真实文件进行更改并使用Puppet和msutter/dsc模块进行测试,该模块使用归档资源.

我发现我认为文件在我的机器上的位置:

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\DSCResources\MSFT_ArchiveResource\MSFT_ArchiveResource.psm1
Run Code Online (Sandbox Code Playgroud)

但是,当我运行Puppet时,很明显我的更改后的代码没有被执行.(如果我在文件的顶部设置$ Debug = $ true,我没有看到额外的输出.)是否有一些Windows缓存保存此文件,我必须清除?是从ZIP还是其他档案加载?

我怀疑Puppet是否与这个问题有关,但是如果它敲响了铃,就提起它.(我只在代理上进行了代码更改.)

更新:

当我在Powershell中运行以下行时,我找不到任何包含"dsccore"的预期名称的进程:

Get-WmiObject msft_providers | select -ExpandProperty provider
Run Code Online (Sandbox Code Playgroud)

结果:

RegistryEventProvider
PolicyAgentInstanceProvider
CIMWin32
Msft_ProviderSubSystem
SCM Event Provider
Win32_WIN32_TERMINALSERVICE_Prov
WmiPerfClass
WmiPerfClass
WmiPerfInst
WmiPerfInst
Run Code Online (Sandbox Code Playgroud)

powershell puppet dsc

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

C#可以使用融合的乘法加法吗?

如果C#编译器/抖动在所使用的硬件上可用,是否使用融合的乘法加法运算?如果可以,我是否需要设置任何特定的编译器设置才能利用它?

我的意图是将补偿算法用于扩展精度算术,并且其中一些可以编写为使用FMA。

c# fma system.numerics

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

如何为包含 Rc&lt;Refcell&lt;Trait&gt;&gt; 的结构实现 Deref?

我的目标是将针对我的结构的方法调用委托给 Trait 的方法,其中 Trait 对象位于 ofRc内部RefCell

我尝试遵循这个问题的建议: How can I acquire an &A reference from a Rc<RefCell<A>>?

我收到编译错误。

use std::rc::Rc;
use std::cell::RefCell;
use std::fmt::*;
use std::ops::Deref;

pub struct ShyObject {
    pub association: Rc<RefCell<dyn Display>>
}

impl Deref for ShyObject {
    type Target = dyn Display;
    fn deref<'a>(&'a self) -> &(dyn Display + 'static) {
        &*self.association.borrow()
    }
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

这是错误:

use std::rc::Rc;
use std::cell::RefCell;
use std::fmt::*;
use std::ops::Deref;

pub struct ShyObject {
    pub association: Rc<RefCell<dyn …
Run Code Online (Sandbox Code Playgroud)

rc traits rust refcell

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

在 AS3 List 控件(flash.controls.List)中设置字体名称和大小

使用 CS4,如何设置 List 控件的字体?我试过这个:

        var myFormat:TextFormat = new TextFormat();
        myFormat.font = config.settings["list font name"];
        myFormat.size = Number(config.settings["list font size"]);
        list.setStyle("textFormat", myFormat);
Run Code Online (Sandbox Code Playgroud)

没有骰子。

fonts actionscript-3 flash-cs4

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

为什么Perl的File :: Copy似乎无声地失败?

我有一个适用于Windows XP的Perl脚本.它使用File :: Copy的move功能将目录树移动到同一驱动器上的另一个位置.该脚本在Windows 2008上失败(静默).没有任何移动,没有删除任何内容.

我正在使用ActiveState Perl 5.10.0 Build 1005和它附带的File :: Copy.

有人知道Windows 2008上的ActiveState Perl可能会导致这个问题吗?

示例脚本:

use File::Copy;
print "Move AAA to ZZZ\n";

move("AAA", "ZZZ");

print "Done.\n";
Run Code Online (Sandbox Code Playgroud)

perl copy windows-server-2008

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

如何将随机数生成器存储在结构中?

我正在尝试将随机数生成器存储在结构中。我似乎无法获得任何要识别的 Rng 结构的结构定义,例如 ThreadRng。这有效:

use rand::{
    self,
    distributions::{Distribution, Uniform},
}; // 0.6.4

fn main() {
    let mut rng  = rand::thread_rng();
    let die_range = Uniform::new_inclusive(1, 6);
    let die = die_range.sample(&mut rng);
    println!("{}", die);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试定义一个变量以具有 Rng 的实际类型,则会收到错误:

use rand::{
    self,
    ThreadRng,
    distributions::{Distribution, Uniform},
}; // 0.6.4

fn main() {
    let mut rng :ThreadRng = rand::thread_rng();
    let die_range = Uniform::new_inclusive(1, 6);
    let die = die_range.sample(&mut rng);
    println!("{}", die);
}
Run Code Online (Sandbox Code Playgroud)

错误是:

error[E0432]: unresolved import `rand::ThreadRng`
 --> src/main.rs:3:5
  |
3 |     ThreadRng,
  |     ^^^^^^^^^ …
Run Code Online (Sandbox Code Playgroud)

random rust

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

如何使用XML :: LibXML使用SAX解析XML?

到目前为止,我发现的唯一示例代码已经很久了,它将不再起作用(使用已弃用的类).我所需要的只是一些基本的东西:

  1. 从文件加载和解析XML

  2. 定义SAX事件处理程序

  3. 读取传递给事件处理程序的元素的属性或文本值

xml perl sax xml-libxml

3
推荐指数
2
解决办法
2821
查看次数

使用函数装饰时,如何将应用程序数据传递到 actix-web 中的服务路由处理程序函数?

我在文档中找到了如何创建受互斥体保护的全局状态的示例,该状态在可供所有路由处理程序使用的处理线程之间共享。完美的!但是,我更喜欢使用附加到我的函数的属性来连接我的路由处理程序。我不知道使用属性函数并传递全局状态的语法(如果允许)。

以下是 actix-web 文档中的示例,来自https://docs.rs/actix-web/1.0.2/actix_web/web/struct.Data.html

use std::sync::Mutex;
use actix_web::{web, App};

struct MyData {
    counter: usize,
}

/// Use `Data<T>` extractor to access data in handler.
fn index(data: web::Data<Mutex<MyData>>) {
    let mut data = data.lock().unwrap();
    data.counter += 1;
}

fn main() {
    let data = web::Data::new(Mutex::new(MyData{ counter: 0 }));

    let app = App::new()
        // Store `MyData` in application storage.
        .register_data(data.clone())
        .service(
            web::resource("/index.html").route(
                web::get().to(index)));
}
Run Code Online (Sandbox Code Playgroud)

请注意命名的路由处理程序index是如何传递的web::Data

现在这里是我的代码的一些片段。

use actix_web::{get, App, HttpResponse, HttpServer, Responder};
pub mod request;
pub mod …
Run Code Online (Sandbox Code Playgroud)

global-variables rust actix-web

3
推荐指数
1
解决办法
4643
查看次数

找到BigInteger的最重要部分

我已经阅读了很多精确的算法来识别32位和64位整数的最高位(包括SO上的其他帖子).但我正在使用BigIntegers,并将处理长达4000位的数字.(BigInteger将希尔伯特指数保持为Hilbert空间填充曲线,该曲线在分形深度为4的情况下蜿蜒通过1000维超立方体.)但是大部分情况将涉及可以适合64位整数的数字,所以我想要一个最适合常见情况的解决方案,但可以处理极端情况.

天真的方式是:

BigInteger n = 234762348763498247634; 
int count = 0; 
while (n > 0) {
    n >>= 1;
    count++;
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑将常见情况转换为Longs并使用64位算法,否则使用不同的算法来处理真正的大数字.但我不确定转换为Long的成本是多少,以及这是否会影响在64位数量上进行剩余计算的效率.有什么想法吗?

该功能的一个预期用途是帮助优化逆灰度代码计算.

更新.我编写了两种方法并运行了基准测试.

  • 如果数字在Ulong.MaxValue下,那么转换为Ulong并执行二进制搜索方法的速度是使用BigInteger.Log的两倍.
  • 如果数字非常大(我高达10000位),那么Log的速度提高了3.5倍.

    一百万次调用MostSignificantBitUsingLog(可转换为Long)已经过了96毫秒.

    对EverySignificantBitUsingBinarySearch(可转换为Long)的一百万次调用已过去42毫秒.

    对于MostSignificantBitUsingLog进行一万次调用已经过了74毫秒(太大而无法转换).

    对于MostSignificantBitUsingBinarySearch(太大而无法转换)的一万次调用已经过了267毫秒.

以下是使用Log的代码:

public static int MostSignificantBitUsingLog(BigInteger i)
{
    int bit;
    if (i == 0)
        bit = -1;
    else
        bit = (int)BigInteger.Log(i, 2.0);

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

这是我的二元搜索方法.可以改进以将二进制除法扩展到BigInteger范围.我会尝试下一步.

public static int MostSignificantBitUsingBinarySearch(BigInteger i)
{
    int bit;
    if (i.IsZero)
        bit = -1;
    else if (i < ulong.MaxValue)
    {
        ulong y = (ulong)i;
        ulong s;
        bit …
Run Code Online (Sandbox Code Playgroud)

c# biginteger

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

如何在Puppet DSL中将哈希值转换为字符串?

我有一个hash哈希,我需要嵌入exec资源命令.我的想法是将序列化为hasha string并将其插入到exec中call.该exec调用将通过执行ruby代码ruby -e 'ruby code here'.

使用irb,我知道hash.to_s创建了一个可解析的单行版本hash.或者我可以使用json.我怀疑你可以打电话给to_s傀儡,但我不确定.

Puppet的stdlib有parseyamlparsejson反序列化,但有没有办法序列化为可解析string?我可以编写一个自定义木偶函数来完成它,但如果有的话,我更喜欢已经内置的解决方案.

更新 我正在考虑定义一个木偶功能.我之前从未写过,所以我不确定语法.这是我的第一次尝试:

Puppet::Parser::Functions.newfunction(
    :serialize_hash, 
    :arity => 2,
    :doc => "Serialize a hash to any depth and optionally escape the double quotes.",
    :type => :rvalue) do |args| 
  hash = args[0]
  escape_quotes = args[1]
  serialized = hash.to_s
  if (escape_quotes)
    serialized.sub!(/"/, "\\\"")
  end
  serialized 
end
Run Code Online (Sandbox Code Playgroud)

ruby puppet

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