.NET框架的各个部分需要使用属性的字符串名称:
ArgumentException 使用有问题的变量的名称DependencyProperty 使用它支持的属性的名称INotifyPropertyChanged 使用刚刚更改的属性的名称.填充这些参数的最简单方法似乎是对它们进行硬编码(即:)new ArgumentNullException("myArg").这似乎过于脆弱,直到运行时才会发现你的重构破坏了关联.
使用反射来验证这些参数是跳出来的唯一解决方案但是说验证只在运行时执行.
是否有更好的方法来定义成员与其名称之间的关系?将优先考虑简单但优雅的设计时执行.
在操作Java 8流时,我遇到了一个错误,编译器似乎"忘记"了我的泛型参数的类型.
以下代码段创建了一个类名流,并尝试将流映射到流的流Class<? extends CharSequence>.
public static Stream<Class<? extends CharSequence>> getClasses() {
return Arrays.asList("java.lang.String", "java.lang.StringBuilder", "Kaboom!")
.stream()
.map(x -> {
try {
Class<?> result = Class.forName(x);
return result == null ? null : result.asSubclass(CharSequence.class);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
})
//.filter(x -> x != null)
;
}
Run Code Online (Sandbox Code Playgroud)
当我取消注释过滤器以从流中删除空条目时,我得到编译错误
类型不匹配:无法转换为Class <capture#15-of?将CharSequence>扩展为Class <Object>
有人可以向我解释为什么添加过滤器导致此错误?
PS:这里的代码有些随意,很容易让错误消失:在应用过滤器之前将映射流分配给临时变量.我感兴趣的是为什么上面的代码片段会产生编译时错误.
编辑:正如@Holger所指出的那样,这个问题并不完全与Java 8 Streams重复:为什么Collectors.toMap对于带有通配符的泛型有不同的行为?因为那里有问题的片段目前编译没有问题,而这里的片段没有.
我正在使用Viewbox来缩放固定大小的画布(包含各种路径,这些路径一起形成一个有意义的画面).
<StackPanel Background="Red" Width="400" UseLayoutRounding="True">
<StackPanel.Resources>
<Style TargetType="Viewbox">
<Setter Property="Height" Value="400" />
<Setter Property="Margin" Value="0,0,0,50" />
</Style>
<Style TargetType="Path">
<Setter Property="Stroke" Value="Blue" />
<Setter Property="StrokeThickness" Value="2" />
</Style>
</StackPanel.Resources>
<Viewbox>
<Canvas Width="5" Height="5">
<Path Data="M 1,1 h 3 v 3 h -3 z" />
</Canvas>
</Viewbox>
<Viewbox>
<Canvas Width="6" Height="6">
<Path Data="M 1,1 h 4 v 4 h -4 z" />
</Canvas>
</Viewbox>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
当我在PC上本地渲染时,此xaml显示在顶部,如在模拟器上渲染时显示在底部.当模拟器产生所需的结果时,有人可以向我解释为什么第二条路径超出红色面板吗?

xaml canvas microsoft-metro windows-runtime windows-store-apps