小编Eam*_*nne的帖子

面试问题:WPF开发人员

每个WPF开发人员应该知道什么?

入门级

  • 强大的.NET 2.0背景并愿意学习!
  • 解释依赖属性?
  • 什么是风格?
  • 什么是模板?
  • 捆绑
  • 基类之间的差异:Visual,UIElement,FrameworkElement,Control
  • Visual vs Logical树?
  • 财产变更通知(INotifyPropertyChange和ObservableCollection)
  • ResourceDictionary - 由a7an添加
  • UserControls - 由a7an添加
  • 泡沫和隧道路由策略之间的区别 - 由Carlo补充
  • 为什么微软推出了另一种标记语言?
  • XAML

中级

  • 路由事件和命令
  • 转换器 - 由Artur Carvalho添加
  • 解释WPF的2遍布局引擎?
  • 如何实施面板?
  • 互操作性(WPF/WinForms)
  • 混合/苹果酒 - 由a7an添加
  • 动画和故事板
  • ClickOnce部署
  • 剥皮/更换主题皮肤
  • 自定义控件
  • 工作线程如何更新UI?
  • DataTemplate与HierarchicalDataTemplate
  • ItemsControl vs ItemsPresenter vs ContentControl vs ContentPresenter
  • 不同类型的触发器

前辈

  • 附加行为的例子?
  • 什么是PRISM,CAL和CAG?
  • 工作线程如何更新UI?
  • WPF 3D - 由a7an添加
  • Silverlight 2和WPF之间的差异
  • MVVM/MVP - 由a7an添加
  • WPF性能调优
  • 像素着色器
  • Freezables的目的

还有其他"技巧"问题吗?

您希望您的WPF开发人员知道混合吗?

.net wpf

182
推荐指数
10
解决办法
7万
查看次数

如何重置反应组件,包括所有可传递的可达状态?

我偶尔会对概念上有状态的组件做出反应,我想重置它们.理想的行为相当于删除旧组件并读取新的原始组件.

React提供了一种方法setState,允许设置组件自己的显式状态,但不包括隐式状态,如浏览器焦点和表单状态,并且它还排除其子级的状态.抓住所有间接状态可能是一个棘手的任务,我宁愿严格而完全地解决它,而不是每一个令人惊讶的新状态都在玩捣蛋.

是否有API或模式来执行此操作?

编辑: 我做了一个简单的例子来演示这种this.replaceState(this.getInitialState())方法并将其与方法进行对比this.setState(this.getInitialState()):https://jsfiddle.net/emn13/kdrzk6gh/ - replaceState更强大.

reactjs

80
推荐指数
3
解决办法
6万
查看次数

如何比较C#中的(目录)路径?

如果我有两个DirectoryInfo对象,我如何比较它们的语义相等?例如,以下路径应全部视为等于C:\temp:

  • C:\temp
  • C:\temp\
  • C:\temp\.
  • C:\temp\x\..\..\temp\.

以下可能等于或不等于C:\temp:

  • \temp 如果当前工作目录在驱动器上 C:\
  • temp 如果当前工作目录是 C:\
  • C:\temp.
  • C:\temp...\

如果考虑当前的工作目录很重要,我可以自己解决这个问题,所以这并不重要.尾随点在窗口中被剥离,因此这些路径确实应该相等 - 但它们不会在unix中被剥离,所以在mono下我会期望其他结果.

区分大小写是可选的.路径可能存在也可能不存在,用户可能拥有或可能没有路径权限 - 我更喜欢快速健壮的方法,不需要任何I/O(所以没有权限检查),但是如果有什么内置的话 - 我对任何"足够好"的东西都很满意......

.net c# filesystems path

70
推荐指数
5
解决办法
4万
查看次数

Powershell:解决可能不存在的路径?

我正在尝试处理一个文件列表,这些文件可能是也可能不是最新的,可能存在也可能不存在.在这样做时,我需要解析项目的完整路径,即使该项目可能使用相对路径指定.但是,Resolve-Path与不存在的文件一起使用时会出现打印和错误.

例如,什么是最简单的化解,干净的方式".\newdir\newfile.txt""C:\Current\Working\Directory\newdir\newfile.txt"使用PowerShell

请注意,System.IO.Path静态方法与进程的工作目录一起使用 - 这不是powershell的当前位置.

powershell

50
推荐指数
5
解决办法
2万
查看次数

C#静态成员"继承" - 为什么会存在这种情况?

在C#中,超类的静态成员被"继承"到子类范围中.例如:

class A { public static int M() { return 1; } }
class B : A {}
class C : A { public new static int M() { return 2; } }
[...]
A.M(); //returns 1
B.M(); //returns 1 - this is equivalent to A.M()
C.M(); //returns 2 - this is not equivalent to A.M()
Run Code Online (Sandbox Code Playgroud)

现在,你不能继承静态类,我唯一​​可以想象静态继承可能重要的地方完全忽略它:尽管你可以创建一个通用约束,它需要一个类型参数T作为子类A,你仍然无法调用T.M()(这可能简化了VM的事情,更不用说M在子类中编写不同的实现并使用它.

因此,静态成员的"继承"仅仅看起来像命名空间污染; 即使你明确限定名称(即B.M)A的版本仍然解决.

编辑与命名空间的比较:

namespace N1{  class X();   }
namespace N1.N2 …
Run Code Online (Sandbox Code Playgroud)

c# inheritance static language-design

45
推荐指数
4
解决办法
3万
查看次数

C#:接口继承getters/setters

我有一组接口,用于与特定的可变对象紧密结合.

该对象的许多用户只需要能够从对象中读取值,然后只需要几个属性.为了避免命名空间污染(更容易智能感知)和跨越使用意图,我希望有一个小的基本接口,它只以只读方式暴露一些"关键"属性.

但是,几乎所有实现都将支持完整的界面,其中包括可修改性.

不幸的是,我遇到了在C#中表达这个概念的障碍:

interface IBasicProps {
   public int Priority { get; }
   public string Name {get;}
   //... whatever
}

interface IBasicPropsWriteable:IBasicProps  {
   public int Priority { set; } //warning CS0108: [...] hides inherited member [...]
   public string Name { set; }
   //... whatever
}
Run Code Online (Sandbox Code Playgroud)

我当然不打算隐藏任何成员,所以不好!

当然,我可以使用方法解决这个问题,但是什么是正确的选择?我想保持"核心"接口尽可能小,即使分割接口除了传递意图之外没有任何其他目的.在拆分接口,它只是真的很明显哪些方法不会做任何更新,这让编写代码更清楚一点(何况还可以很好的正简单的静态单存根足够了好几个简单的情况下) .

我想避免任何抽象类等; 他们重新实现或快速单一用途垫片更复杂和难以理解.

那么,想法?

c# inheritance design-patterns interface

29
推荐指数
2
解决办法
2万
查看次数

脚本的F#:脚本文件的位置

在F#脚本文件(.fsx)中,如何确定当前正在执行的.fsx文件的位置?我想解决相对于它的路径.

我试过,Assembly.GetExecutingAssembly().CodeBase但显然不适用于"动态组装".

scripting f# f#-scripting

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

Thread和ThreadStart

以下两行都相同.但是有什么隐藏的区别吗?应该首选哪一个?

Thread t1 = new Thread(aMethod);

Thread t2 = new Thread(new ThreadStart(aMethod));
Run Code Online (Sandbox Code Playgroud)

谢谢.

.net c# multithreading

26
推荐指数
2
解决办法
4771
查看次数

是否有一个C#单元测试框架支持任意表达式而不是一组有限的adhoc方法?

基本上NUnit,xUnit,MbUnit,MsTest等具有类似于以下的方法:

Assert.IsGreater(a,b)
//or, a little more discoverable
Assert.That(a, Is.GreaterThan(b))
Run Code Online (Sandbox Code Playgroud)

但是,内置的这种比较运算符数量有限; 并且他们不必要地复制语言运算符.当我想要任何稍微复杂的东西时,比如...

Assert.That(a.SequenceEquals(b))
Run Code Online (Sandbox Code Playgroud)

我经常要么继续挖掘手册以找到NUnit-speak中表达式的等价物,要么被迫回退到具有较少有用错误消息的普通布尔断言.

但是,C#与任意表达式很好地集成 - 因此应该可以使用具有以下签名的方法:

void That(Expression<Func<bool>> expr);
Run Code Online (Sandbox Code Playgroud)

这种方法既可用于执行测试(即验证断言),也可用于在测试失败时提供不太透明的诊断; 毕竟,表达式可以呈现为伪代码,以指示哪个表达式失败; 通过一些努力,您甚至可以智能地评估失败的表达式,以提供子表达式值的一些线索.

例如:

Assert.That(()=> a == b);//could inspect expression and print a and b
Assert.That(()=> a < b && b < c);
//could mention the values of "a<b" and "b<c" and/or list the values of a, b, and c.
Run Code Online (Sandbox Code Playgroud)

至少,它会使表达式的并行语言变得不必要,并且在某些情况下,它可能使失败消息更有用.

这样的事情存在吗?

编辑: 在尝试(并且喜欢!)Power Assert之后,我最终重新实现它以解决一些限制.我的变体发表为ExpressionToCode ; 请参阅下面答案以获取改进列表.

c# linq unit-testing expression-trees

23
推荐指数
4
解决办法
1197
查看次数

用于计算百分位数以移除异常值的快速算法

我有一个程序需要重复计算数据集的近似百分位数(顺序统计),以便在进一步处理之前删除异常值.我目前正在通过对值数组进行排序并选择适当的元素来实现这一目标; 这是可行的,但它在配置文件上是一个值得注意的昙花一现,尽管它是该计划的一个相当小的部分.

更多信息:

  • 该数据集包含了100000浮点数字的顺序,并认为是"合理"分配 - 有不太可能在不久的特定值密度的重复,也不巨大的尖峰; 如果一些奇怪的原因分布为奇数,这是确定一个近似是不太准确的,因为数据很可能搞砸总之,进一步处理可疑.但是,数据不一定是统一的或正态分布的; 它不太可能退化.
  • 近似解决方案没问题,但我确实需要了解近似值如何引入错误以确保其有效.
  • 由于目标是去除异常值,我在任何时候都在同一数据上计算两个百分点:例如一个在95%,一个在5%.
  • 该应用程序在C#中,在C++中有点繁重; 任何一个伪代码或预先存在的库都可以.
  • 一个完全不同的去除异常值的方法也可以,只要它是合理的.
  • 更新:似乎我正在寻找一种近似选择算法.

虽然这都是在一个循环中完成的,但每次数据(略微)都不同,因此重用数据结构并不像这个问题那样容易.

实施解决方案

使用Gronim建议的维基百科选择算法将这部分运行时间减少了大约20倍.

由于我找不到C#实现,这就是我想出的.即使对于小型输入,它也比Array.Sort更快; 在1000个元素上它快25倍.

public static double QuickSelect(double[] list, int k) {
    return QuickSelect(list, k, 0, list.Length);
}
public static double QuickSelect(double[] list, int k, int startI, int endI) {
    while (true) {
        // Assume startI <= k < endI
        int pivotI = (startI + endI) / 2; //arbitrary, but good if sorted
        int splitI = partition(list, startI, …
Run Code Online (Sandbox Code Playgroud)

c# c++ algorithm percentile

18
推荐指数
3
解决办法
2万
查看次数