【发布时间】:2015-10-09 15:04:51
【问题描述】:
代码的原因可能是什么
Line ScoreLine;
ScoreLine = Charting.CreateLine(
"Score", "", Symbol, new Pen(Color.Pink),
LineStyle.Line, Charting.PriceChart, 2
);
导致与
不同的行为Line ScoreLine;
Func<string, Color, int, Line> createLine
= (string label, Color color, int pad)
=> Charting.CreateLine(label, "", Symbol, new Pen(color),
LineStyle.Line, Charting.PriceChart, pad);
ScoreLine = createLine("Score", Color.Pink, 2);
它看起来像一个微不足道的重构,但第二个版本的行为方式非常奇怪。似乎 lambda 函数的参数无关紧要,而是先验地设置为特定值。
【问题讨论】:
-
哪些参数?您硬编码和关闭的那些将保留在
Func中,其他可以通过将不同的值传递给Func来修改。如果你能想出一个SSCCE 来证明不是这样,那将非常有助于诊断问题。 -
你能更好地描述发生了什么吗?似乎使用了哪些值?他们从哪里来?
-
以前的值在哪里?有可能它们只是默认值吗?我认为有太多事情不在这个问题中——最好的答案可能只是“不,
Func没有理由这样做,而错误在其他地方”。跨度> -
这可能是与捕获某些变量值的 lambda 有关的问题,但我不确定您上面发布的内容是否完全代码,或者您是否替换了一些常量的变量(即
Color.Pink而不是变量)。 -
SSCCE 不要求您保留 GUI 内容。你不能只用终端输出制作一个等效的代码路径吗?您的问题与
Charting.CreateLine无关,因此没有理由坚持下去。通常发生在我身上的是我去制作一个 SSCCE,然后我发现为什么我的代码的其他部分在这样做时出错了。我强烈推荐这个。