小编Olm*_*lmo的帖子

Roslyn语法节点是否重用?

我一直在研究Roslyn CTP,虽然它解决了与Expression树API类似的问题,但它们都是不可变的,但Roslyn以一种完全不同的方式这样做:

  • Expression节点没有对父节点的引用,使用a进行修改ExpressionVisitor,这就是为什么可以重用大部件的原因.

  • SyntaxNode另一方面,Roslyn 有一个对其父级的引用,因此所有节点都有效地成为一个无法重用的块.类似的方法Update,ReplaceNode等等,提供了进行修改.

这到底在哪里?DocumentProjectISolution?API促进树的逐步更改(而不是按钮向上),但每个步骤是否完整复制?

为什么他们这样做了?我有什么有趣的伎俩吗?

c# expression-trees roslyn

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

Aspx到Razor语法转换器?

我在C#中为MVC写了大量的ASPX和ASCX文件,我想将它们转换为新的Razor语法.

任何人都知道一些使这项工作更快的实用工具吗?

c# asp.net-mvc razor asp.net-mvc-3

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

简化布尔表达式算法

有人知道一个简化布尔表达式的算法吗?

我记得布尔代数和Karnaught地图,但这适用于EVERITHING为布尔值的数字硬件.我想要考虑一些子表达式不是布尔值的东西.

例如:

a == 1 && a == 3
Run Code Online (Sandbox Code Playgroud)

这可以转换为纯布尔表达式:

a1 && a3 
Run Code Online (Sandbox Code Playgroud)

但这是表达是不可简化的,而对于算术的一点点知识,everibody可以确定表达式只是:

false
Run Code Online (Sandbox Code Playgroud)

有些人知道一些链接?

algorithm boolean-logic boolean boolean-expression

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

在基础构造函数中使用lambdas表达式的例子

在我们构建的框架中,我们需要以下模式:

public class BaseRenderer
{
    Func<string> renderer;
    public BaseRenderer(Func<string> renderer)
    {
        this.renderer = renderer;
    }

    public string Render()
    {
        return renderer();
    }
}

public class NameRenderer : BaseRenderer
{
    public string Name{ get; set; }

     public NameRenderer ()
        : base(() =>this.Name)
     {}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我们在调用基础构造函数时创建了一个lambda.

public class Program
{
    public static void Main()
    {
        Console.WriteLine(new NameRenderer(){Name = "Foo"}.Render());
    }
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当尝试实际使用lambda时,它会抛出NullReferenceException(控制台应用程序)或某种ExecutionEngineExceptionexception(IIS上的Web应用程序).

我认为原因是在调用基础构造函数之前该指针尚未就绪,因此lambda this.Name在此阶段无法捕获.

它不应该在"捕获时间"而不是"执行时间"中抛出异常吗?这种行为是否有记录?

我可以用不同的方式重构代码,但我认为值得评论.

c# linq lambda c#-3.0

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

稳定的随机颜色算法

在这里,我们有一个有趣的真实算法要求涉及颜色.

  1. N 漂亮的颜色:为了绘制漂亮的图表(即:饼图),我们需要选择一组随机的N颜色,这些颜色"足够不同"并且看起来很好.这可以通过固定亮度和饱和度并逐步调整色调来实现360/N.
  2. 稳定的颜色分配:给定Pie_1带扇区标记('A','B','C')和Pie_2带扇区标记('B','C','D'),如果扇区的颜色会很好Pie_1和Pie_2上的B和C相同.如果扇区被移除或随着时间的推移添加到图表中,这将有助于防止混淆.标签是唯一稳定的东西.
  3. 允许硬编码颜色:算法应允许硬编码标签 - >颜色关系作为输入,但会为其余标签计算颜色(根据规则1和2).

我认为这个算法即使看起来很特别,也会在不止一种情况下发挥作用.

有任何想法吗?

更新: Eric是正确的,因为当新标签出现和消失时,不可能保证每个标签的颜色稳定性.但我很高兴它是否"足够稳定",即颜色变化最小化.

我想的是:

  1. 每个标签使用散列(标签)%360获得随机色调值
  2. 为了保证生成的色调足够不同,我们将色调圆以固定的步长(即:)划分,2*N并尝试将先前的色调值"舍入"到新的差异值.
  3. 在不同标签达到相同的圆形色调值的情况下,我们以某种方式打破关系并将点移动到其他位置.

但这留下了硬编码颜色的问题.

algorithm rgb gdi colors hsv

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

使用Visual Studio 2012调试IIS 8.权限不足

如果我尝试使用本地IIS 8开始调试ASP.Net MVC(3或4,无关紧要),它说(只需点击播放按钮):

无法在Web服务器上启动调试.Visual Studio没有足够的权限来调试此过程.要调试此过程,必须以管理员身份运行Visual Studio.

如果我尝试手动附加DEBUG - >附加到进程 - >显示所有用户的进程 - > w3wp.exe我收到一条simmilar消息.

无法附加到流程.Visual Studio没有足够的权限来调试此过程.要调试此过程,必须以管理员身份运行Visual Studio.

使用IIS Express它可以工作,只有完整的IIS 8阻止我调试.

我在IIS上启用了调试 - >默认网站 - > .Net编译 - > Debug = True

我也尝试更改DefaultAppPool以使用ApplicationPoolIdentity/Network Service /我自己的帐户.

而且,我曾尝试以管理员身份运行VS2012.

windows-8 visual-studio-2012 iis-8

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