小编And*_*ock的帖子

Expression.Lambda()的参数问题

更新:这确实有效,我是愚蠢的:(

我有以下扩展方法

public static string ExtMethod(this object self, object myparameter);
Run Code Online (Sandbox Code Playgroud)

在运行时,这可以通过多种方式调用,我认为这些都是可能的:

Expression<Func<T, string>> expr = x => x.property.ExtMethod(5);
Expression<Func<T, string>> expr = x => x.property.ExtMethod(new object());
Expression<Func<T, string>> expr = x => x.property.ExtMethod(someMethod());
Expression<Func<T, string>> expr = x => x.property.ExtMethod(x.someMethod());
Expression<Func<T, string>> expr = x => x.property.ExtMethod(x.OtherProperty);
Run Code Online (Sandbox Code Playgroud)

我需要做的是评估" myparameter",给出" expr"和" T"

因为在两种情况下x使用myparameter,我认为我需要创建一个表单的委托:

Expression<Func<T, object>> expr = x => [myparameter expression here]
Run Code Online (Sandbox Code Playgroud)

我认为这会奏效:

var extMethodExpr = expr.Body as MethodCallExpression;
var myparameterExpr = extMethodExpr.Arguments[1];

var …
Run Code Online (Sandbox Code Playgroud)

c# lambda

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

读/写锁定asp.net中的静态var

我的C#ASP.NET项目中有一个静态变量(抽象数据类型,而不是原始数据).

它将由许多线程同时和频繁地读取.

我需要很少写入(与读取次数相比).

什么是确保线程的最佳方法,以便在写入时,其他线程不读取部分写入的数据?

我只使用过lock,但我明白这会阻止并发读取:(

谢谢

c# asp.net multithreading

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

ILMerge实际上是合并程序集,还是只将所有内容放在一个文件中?

ILMerge做什么?

它是创建一个新的程序集,还是只将多个程序集放入一个dll中?

我是从以下角度问:

  • 当我合并具有InternalsVisibleTo彼此属性的程序集时会发生什么?
  • 如果我从完全限定的程序集名称中进行字符串反射,会发生什么

谢谢

.net ilmerge

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

如何获取常量表达式的值

我正在尝试评估常量表达式的值。在调试器中我可以看到该值:

手表

但我如何在代码中得到它?

表达式的形式为:

x => x.ListPropery[5].ChildProperty
Run Code Online (Sandbox Code Playgroud)

我正在沿着表达式将其转换为字符串,但我陷入了索引器部分。

索引器创建一个MethodCallExpressionon IList<>to get_Item,然后我可以进入参数以获取如下生成的常量表达式:

for(var i = 0; i < list.Count; i++)
{
    var j = i;
    Expression<Func<IList<TValue>, TValue>> indexer = xs => xs[j];
Run Code Online (Sandbox Code Playgroud)

更新:

(exp.Arguments[0] as MemberExpression).Member
Run Code Online (Sandbox Code Playgroud)

返回一个MemberInfo

c#

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

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

红宝石的平行性

我在我的ruby构建脚本中有一个循环,遍历每个项目并调用msbuild并执行各种其他位,如minify css/js.

每个循环迭代都独立于其他循环,所以我想对它进行分析.

我该怎么做呢?

我试过了:

myarray.each{|item|
    Thread.start {

        # do stuff

     }
}
puts "foo"
Run Code Online (Sandbox Code Playgroud)

但红宝石似乎马上退出(打印"foo").也就是说,它运行在循环上,启动一个线程的负载,但因为没有后each,红宝石退出杀死其他线程:(

我知道我能做到thread.join,但如果我在循环中这样做,那么它就不再平行了.

我错过了什么?

我知道http://peach.rubyforge.org/,但使用它我得到各种奇怪的行为,看起来像我不知道如何解决的变量范围问题:(

编辑:如果我可以在放入"foo"之前等待所有子线程执行,或者至少主ruby线程退出,这将是有用的.这可能吗?

谢谢

ruby multithreading

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

了解 Chrome 开发工具时间线

我试图理解为什么 Chrome Dev Tools 报告了几个长帧。

在此处输入图片说明

火焰图中的第一行(调用堆栈的顶部)主要是Timer Fired事件,由jQuery.Deferred()s 执行一堆$(function(){ });就绪函数触发。

如果我挖掘到jQuery的根源并更换其使用setTimeoutrequestAnimationFrame火焰图没有太大变化,我仍然得到许多RAFS单帧内发射(如由开发工具报告的)制作长的帧。我本来希望做下面的伪代码:

window.requestAnimationFrame(function() {
    // do stuff
});

window.requestAnimationFrame(function() {
    // do more stuff
});
Run Code Online (Sandbox Code Playgroud)

在两个不同的动画帧上执行。不是这样吗?

所有正在执行的 JS 都是必要的,但是我应该怎么做才能将它作为“微任务”执行(如暗示的,但这里没有解释https://developers.google.com/web/fundamentals/performance/rendering/ optimize-javascript-execution ) 何时setTimeout并且rAF似乎没有实现这一点。

更新

这是其中一个长帧的放大镜头,其中似乎没有任何回流(强制或其他方式)。为什么这里的所有 rAF 回调都在一帧中执行?

在此处输入图片说明

google-chrome-devtools jank

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

通用委托或通用委托问题

如何编译以下代码?

    Action<MyClass<object, object>> func = x => Console.WriteLine(x.ToString());

    public void Apply<T1, T2>(MyClass<T1, T2> target)
    {
        func.Invoke(target);
    }
Run Code Online (Sandbox Code Playgroud)

我知道它不起作用,因为MyClass <T1,T2>不是MyClass <object,object>,但我该怎么办?

我可以使功能通用吗?或者我可以施展目标吗?

不管怎样,怎么样?

如果它有帮助,那么func中的任何内容都不会执行T1或T2特定的任何操作.我知道这个假设可能会让它变得脆弱,但单元测试应该能够解决任何问题.

编辑:我现在正在通过大量空接口来避免这个问题,而我宁愿这样做!

谢谢

c# generics delegates

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

带有WPF画布的Clipboard.SetImage为大图像留下剪贴板为空

我正在将WPF画布渲染到图像并将其粘贴到剪贴板上.

如果画布很小(<900px square),它一切正常.

我有一个更大的画布(3000 + px square),剪贴板是空的(在photoshop/word等中禁用粘贴选项)

var transform = canvas.LayoutTransform;
canvas.LayoutTransform = null;

var size = new Size(canvas.Width, canvas.Height);

canvas.Measure(size);
canvas.Arrange(new Rect(size));

var renderBitmap = new RenderTargetBitmap((int) size.Width, (int) size.Height, 96d, 96d, PixelFormats.Pbgra32);
renderBitmap.Render(canvas);

canvas.LayoutTransform = transform;

Clipboard.SetImage(renderBitmap);
Run Code Online (Sandbox Code Playgroud)

我没有发现是否有一个阈值大小导致这个中断.

3140 x 1903不起作用,3140 x 317

这是怎么回事?

谢谢

.net c# wpf canvas

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