小编Tor*_*mod的帖子

在Linq中使用点分子语法时,我可以访问SelectMany的跳过的"父"吗?

在查询语法中我可以写

var greendoorsWithRooms = from room in house.roooms
from door in room.doors
where door.Color = green
select new {d=door,r=room}
Run Code Online (Sandbox Code Playgroud)

有没有办法用虚线语法实现同样的目的?

var greendoorsWithRooms = house.rooms.SelectMany(room=>room.Doors)
     .Where(door=>door.Color==green)
     .Select(door=>new{ <room is not in scope> }
Run Code Online (Sandbox Code Playgroud)

我正在教一些非程序员使用LINQPad来对照专有对象模型,这样我们就不必围绕每个奇怪的情况创建GUI.如果他们不必学习查询语法将是有益的.目前,我已经提供了使用foreach解决这个问题的片段,但问题仍然偶尔会出现.

c# linq

19
推荐指数
2
解决办法
6686
查看次数

如何在LINQPad中增加图形限制?

LINQPad中显示的结果是有限的.如果对象是深层嵌套的,则会显示一条红线.我想增加一个限制,所以我可以看到更多的嵌套对象.

你知道怎么做吗?(我没有在选项中找到它.)

背景不在原始问题中:如果总输出超过某个阈值(总页面大小),LINQPad将显示"图形限制"错误消息.建议的答案是解决如何限制单独转储对象图的深度,这可能有助于避免达到总大小限制.但是,它没有增加"图形的限制",这正是OP所要求的.

linqpad

15
推荐指数
2
解决办法
1809
查看次数

当 T 被限制为枚举时,为什么 return default(T?) 不给出 null?

我有一个解析器,可以将文本文件渲染到数据模型中。有些字段是可选的,在模型中将表示为 null。

然而,一个奇怪的行为让我头疼。当我具体处理可为空时,它的行为符合预期。

Foo? a = null;
Run Code Online (Sandbox Code Playgroud)

...工作得很好。

Foo? b = default(Foo?);
Run Code Online (Sandbox Code Playgroud)

...工作也很好。b 为空。

然而,每当我将其包装在泛型类中时,似乎很难以相同的方式处理泛型类型参数。

void Main()
{
    Foo? is_null = null;
    Foo? is_also_null = default (Foo?);

    Foo? does_not_work = FooClass.GetNull<Foo>();
    Foo? is_not_null = FooClass.GetDefault<Foo>();   // Should be null, AFAICT, but isn't,
    
}

public static class FooClass
{
    public static T? GetNull<T>() where T:System.Enum
    {
        return null;  //Compile error: CS0403 Cannot convert null to type parameter 'T' because it could be a non-nullable value type. Consider using 'default(T)' instead.
    } …
Run Code Online (Sandbox Code Playgroud)

.net c#

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

如何安排条件ContinueWith

我在一堆LINQ查询上有一些GUI.查询需要一些时间来执行,所以我希望GUI能够响应并显示busyindicators和进度条.许多查询都是检查数据中存在的某些条件.如果查询返回空结果,则应用程序将继续下一个查询.如果它返回结果,则返回集将具有严重性"警告"或"错误".如果是警告,则继续执行.如果是错误,它应该停止.

许多代码使用线程池和GUI播放"乒乓".准码:

TaskFactory.StartNew(()=>
    {
       Run in background
    }.ContinueInGui(()=>
    {
       Update something
    }).ContinueInBackground(()=>
    {
      Do more work;
    }).ContinueInGui(()=> etc etc
Run Code Online (Sandbox Code Playgroud)

这很整洁.但是,如果在数据中发现错误,我不会看到如何插入条件来执行不同的延续路径或中断连续链.

ContinueWithIf没有方法(谓词,委托{},TaskScheduler)我是否使用TaskCancellation,是否抛出异常?或者是否有一些我没想到的简单分支机制?

c# continuations asynchronous task-parallel-library c#-4.0

11
推荐指数
2
解决办法
4099
查看次数

可视树外的数据绑定.数据上下文桥接

我试图将动态行为绑定到WPF逻辑和可视树之外的可视元素.

我的问题是RadChart图的颜色是在(准路径)中给出的:RadChart.SeriesMapping.LineSeriesDefinition.Appearance.Stroke

我原本想将它绑定到XAML中图表datacontext的属性.天真地,我刚刚写了一个普通的{Binding PlotBrush}

编译器返回"找不到Governing FrameWorkelement"错误.在阅读之后,我认为这意味着在层次结构中解析datacontext不起作用.因为它的祖先(XAML说话)具有除Fra​​meWorkElement之外的其他类型和其他关系,而不是内容控件的内容.至少,这是我目前对它的理解.请指正.

所以,我找到了"DataContext Bridge" http://www.codeproject.com/KB/WPF/AttachingVirtualBranches.aspx

简单地说,它说你绑定是在分配DataContext的运行时框架元件(未任何那些继承了它)的DataContext属性一个的DataContext的资源范围内FrameworkElement的实例.然后使用相同的资源对象实例绑定到您希望"附加"到DataContext继承动态的"分支"的datacontext属性.但该文章的作者很幸运能够实现被观察财产的验证用户.SolidColorBrush是密封的,我想即使使用装饰器也可以实现一个完整的画笔.

就我而言,这并没有帮助我做我想做的事情,但我"非常接近".所以我想知道是否有某些方面的XAML技巧可以帮助我.

<Window.Resources>
    <local:FrameWorkElement x:Key="DataContextBridge"/>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

但是,目前还不清楚我是如何利用它的.没有应该设置datacontext的对象.AppearanceSettings不是FrameWorkElement.

<telerik:SeriesAppearanceSettings>
   <telerik:SeriesAppearanceSettings.Stroke>
       Ok, how do I use the fact that I can access the datacontext here?                                         
   </telerik:SeriesAppearanceSettings.Stroke>
</telerik:SeriesAppearanceSettings>
Run Code Online (Sandbox Code Playgroud)

所以,下一步是我可以直接以某种方式获得画笔对象.我尝试过这种事情,只是搞乱:

.cs:

public class ObservableBrush : FrameworkElement
{
    public Brush Brush
    {
        get { return (Brush) GetValue(BrushProperty); }
        set { SetValue(BrushProperty, value); }
    }

    public static readonly DependencyProperty BrushProperty =
        DependencyProperty.Register("Brush", typeof (Brush), typeof (ObservableBrush), new UIPropertyMetadata(new SolidColorBrush(Colors.Black)));
}
Run Code Online (Sandbox Code Playgroud)

XAML的顶部: …

c# data-binding wpf xaml radchart

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

如何保留内存数据结构以便以后在单元测试中使用它

在我的代码中,我偶尔会传递各种字节数组等.此外,它们可能是托管对象.我想保留这些内存结构,以便我可以针对具体示例编写测试用例.

我的标准方法是点击断点,使用调试器查找各种值,然后将它们新建或将单元测试程序集中的文件或内容嵌入为资源.有时,这涉及编写我自己的组件交互抽象,以使我的代码依赖于可以新建的东西.

有没有更简单的方法?我无法想象这是新事物.假设你有一个消防中央单位与之交流.您可以使用它来生成数据报,您希望为单元测试创​​建数据报.此外,当您遇到由于某个未记录的方式而导致的错误,即fire central正在组成其复合消息时,您希望记录并保留这些示例.

理想情况下,我希望能够将所有交互记录到我的代码中,然后选择各种播放方案.但是从调试器中获取内存中的各种数据报示例并将其重新置于单元测试中会对我有所帮助.

有什么建议?

c# tdd unit-testing drivers

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

Elvis运算符在一个转换调用链中

elvis运算符,即null条件运算符,非常酷.

在LINQ查询中,它与null合并"??"一致很好用 运营商.

Somedata.Where(dt=>(dt?.Inner?.InnerMost?.Include=="Yes")??false);
Run Code Online (Sandbox Code Playgroud)

但是如果你需要施放中间值,你会怎么做?

对于链中的一个链接,它可以正常工作.

Somedata.Where(dt=>(
     ((InnerClass)dt?.Inner)
     ?.InnerMost)?.Include=="Yes")
     ??false);
Run Code Online (Sandbox Code Playgroud)

但是通过额外的必要施法,施法和调用被"驱散".

Somedata.Where(dt=>(
     ((InnerMostClass)            <=== Cast
     ((InnerClass)dt?.Inner)
     ?.InnerMost)?.Include=="Yes"))         <=== Use
     ??false);
Run Code Online (Sandbox Code Playgroud)

可能在这里不止一次弄乱了括号,但我希望你明白这个想法.

虽然这个"火车残骸"调用链是一种代码味道,但这样做是否有更具表现力的方式来提高简洁性和清晰度?

c# linq null-coalescing-operator c#-6.0 null-conditional-operator

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

在IT管理之外应用PowerShell

我们拥有灵活的过程控制系统,自动化工程师通过该系统配置包含数千个小型逻辑单元的大型应用程序,这些小型逻辑单元已参数化并集成到控

在粒度级别上有许多重复的任务,并且有许多专有的生产力工具可以满足这种需求.我们有不同的业务部门,自动化工程师在技能和兴趣方面各不相同.花哨的GUI和可用性与灵活性是一个常见的讨论.

乍一看,powershell似乎是实施此类工具的合理平台,并且这也是管理整个系统设置和部署的IT方面的有利交叉技能.

这应该允许脚本精明他们所需的灵活性(他们已经是脚本人群)并且GUI依赖仍然可以获得由PowerShell支持的他们期望的GUI.

但我似乎找不到很多人/团队试图广泛使用PowerShell的脚本性和对象传递来容纳IT管​​理领域之外的异构用户社区.

有人有任何提示或注意事项吗?我错过了一些明显的原因,为什么不应该这样做?

PowerShell不应该接管世界吗?;-)

.net powershell system

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

LINQ表达式类可以实现观察者模式而不是延迟执行吗?

我们在使用状态机的应用程序中遇到问题.该应用程序是作为一个Windows服务实现的,并且是基于迭代的(它通过所有东西"预先"),并且状态机正在处理无数的实例.

当我正在阅读Jon Skeets的MEAP版本书"C#in Depth,2nd ed"时,我想知道我是否可以改变整个事情以使用linq表达式实例,以便使用表达式树来表示警卫和条件.

我们正在这个状态机引擎上构建许多应用程序,并且可能会从VS 2010中的新Expression树形象可视化器中受益匪浅

现在,简单的例子.如果我有一个表达式树,其中存在具有两个子节点的OR表达式条件,那么它们是否可以实现观察者模式以使表达式树成为事件驱动的?如果条件发生变化,它应该通知其父节点(OR节点).由于OR节点随后从"false"变为"true",因此它应该通知ITS父节点,依此类推.

我喜欢表达式树的声明性模型,但是如果您想要基于事件的"实时"条件,则延迟执行模型在控制流的相反方向上工作.

我在野鹅追逐吗?或者BCL中是否有一些概念可以帮助我实现这一目标?

c# linq linq-to-objects state-machine expression-trees

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

MeasureOverride 和 ArrangeOverride。真正的AvailableSize/DesiredSize 是什么?

我被困了两天试图理解WPF的布局原理。

我读了很多文章并探索了 wpf 源代码。

我知道测量/测量覆盖方法接受可用大小,然后设置 DesiredSize 属性。这是有道理的。它递归地调用孩子们并要求他们设置各自所需的大小。

有两件事(至少)我不明白。让我们考虑一个 WrapPanel。

  • 查看 WPF 源代码,MeasureOverride() 方法接受可用大小,然后将其传递给所有子级。然后,它返回子项中生成的desiredsize属性的最大宽度最大高度。它不应该在孩子之间划分可用空间吗?我认为它会迭代子级,然后测量第一个,然后从总可用大小中减去所得的所需大小,以便下一个子级占据更少的空间。当我阅读 WPF 时,WrapPanel.MeasureOverride 似乎没有设置适合所有子项所需的所需大小。它只是给出了任何一个孩子都适合的 DesiredSize。
  • 由于包装面板的性质,我预计对于垂直方向的堆栈面板,高度限制将导致更宽的 DesiredSize (以容纳更多列)。由于高度限制会影响环绕面板的所需大小,因此该逻辑不属于 MeasureOverride 方法吗?为什么堆叠只反映在 ArrangeOverride 方法中?

我认为我对这两种方法的机制存在一些根本性的误解。

任何人都可以给我一个 DesiredSize 和/或AvailableSize 的口头描述,使这个实现有意义吗?

wpf measureoverride arrangeoverride

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