我一直在研究Roslyn CTP,虽然它解决了与Expression树API类似的问题,但它们都是不可变的,但Roslyn以一种完全不同的方式这样做:
Expression节点没有对父节点的引用,使用a进行修改ExpressionVisitor,这就是为什么可以重用大部件的原因.
SyntaxNode另一方面,Roslyn 有一个对其父级的引用,因此所有节点都有效地成为一个无法重用的块.类似的方法Update,ReplaceNode等等,提供了进行修改.
这到底在哪里?Document?Project?ISolution?API促进树的逐步更改(而不是按钮向上),但每个步骤是否完整复制?
为什么他们这样做了?我有什么有趣的伎俩吗?
我在C#中为MVC写了大量的ASPX和ASCX文件,我想将它们转换为新的Razor语法.
任何人都知道一些使这项工作更快的实用工具吗?
有人知道一个简化布尔表达式的算法吗?
我记得布尔代数和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)
有些人知道一些链接?
在我们构建的框架中,我们需要以下模式:
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在此阶段无法捕获.
它不应该在"捕获时间"而不是"执行时间"中抛出异常吗?这种行为是否有记录?
我可以用不同的方式重构代码,但我认为值得评论.
在这里,我们有一个有趣的真实算法要求涉及颜色.
N 漂亮的颜色:为了绘制漂亮的图表(即:饼图),我们需要选择一组随机的N颜色,这些颜色"足够不同"并且看起来很好.这可以通过固定亮度和饱和度并逐步调整色调来实现360/N.我认为这个算法即使看起来很特别,也会在不止一种情况下发挥作用.
有任何想法吗?
更新: Eric是正确的,因为当新标签出现和消失时,不可能保证每个标签的颜色稳定性.但我很高兴它是否"足够稳定",即颜色变化最小化.
我想的是:
2*N并尝试将先前的色调值"舍入"到新的差异值.但这留下了硬编码颜色的问题.
如果我尝试使用本地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.