在某些方法中,我想强制命名参数。原因是未指定参数顺序的自动生成代码(并将保持这种方式)。
我能得到的最接近的是
private val _forceNamed: Object = new Object()
def doSomething(forceNamed: Object = _forceNamed, arg1: String, arg2: String, ...): Unit = {
if (forceNamed != _forceNamed) {
throw Exception(something)
}
// actually do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,这只会在运行时失败,而在编译时失败会更好。
我不确定这段代码是如何工作的.
[Serializable]
class Blah
{
public Blah(int value)
{
this.value = value;
}
public int value;
}
BinaryFormatter b = new BinaryFormatter();
Blah blah = new Blah(4);
MemoryStream s = new MemoryStream();
b.Serialize(s, blah);
s.Seek(0, SeekOrigin.Begin);
blah = null;
blah = (Blah)b.Deserialize(s);
Run Code Online (Sandbox Code Playgroud)
由于我没有无参数构造函数,因此反序列化器可以创建Blah的新实例似乎很奇怪.
通常,人们说最好说s.Length == 0而不是s == "".但似乎这将是一种微观优化,也使得阅读更难.此外,前者相对于后者的一千万,最多可节省60毫秒.
有没有理由让我失踪,例如是否s.Length == 0真的能更好地传达意图?或者需要比较许多字符串是否空洞?
编辑:我知道IsNullOrEmpty,但是当人们回答这个问题时,他们经常提到长度检查比空字符串更好.
编辑2:没有询问这两个案例的最佳方法是IsNullOrEmpty,但我问为什么不可忽视的少数人坚持认为长度检查更优越.我假设他们有充分的理由说出来,并想知道它们是什么.
编辑3:如开头所述,我知道一个比另一个快.问题是,人们推荐它的原因是什么?一些时间表明这并没有导致显着差异.
我试图将属性(Button.Background)绑定到我的自定义附加属性上的属性.
在我的C#文件中
public static class Square
{
public static readonly DependencyProperty PlayerProperty =
DependencyProperty.RegisterAttached
(
name : "Player",
propertyType : typeof(Player),
ownerType : typeof(UIElement),
defaultMetadata: new FrameworkPropertyMetadata(null)
);
public static Player GetPlayer(UIElement element)
{
return (Player)element.GetValue(PlayerProperty);
}
public static void SetPlayer(UIElement element, Player player)
{
element.SetValue(PlayerProperty, player);
}
// Other attached properties
}
Run Code Online (Sandbox Code Playgroud)
我的XAML片段是
<Grid Name="board" Grid.Row="1" Grid.Column="1">
<Grid.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Height" Value="20" />
<Setter Property="Width" Value="20" />
<Setter Property="BorderThickness" Value="3" />
<Setter Property="Background"
Value="{Binding Path=(l:Square.Player).Brush, Mode=OneWay}" /> …Run Code Online (Sandbox Code Playgroud)