可能重复:
使用CLR中的'as'关键字进行转换
哪种方法被认为是最佳做法?
先投?
public string Describe(ICola cola)
{
var coke = cola as CocaCola;
if (coke != null)
{
string result;
// some unique coca-cola only code here.
return result;
}
var pepsi = cola as Pepsi;
if (pepsi != null)
{
string result;
// some unique pepsi only code here.
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
或者我应该先检查,然后再投?
public string Describe(ICola cola)
{
if (cola is CocaCola)
{
var coke = (CocaCola) cola;
string result;
// some unique coca-cola only code …Run Code Online (Sandbox Code Playgroud) 说我有一个对象,someDrink.这可能是类型CocaCola或者Pepsi这两者继承抽象Cola(它继承Drink)或任何一种饮料对这一问题.我有一个方法返回一个最喜欢的饮料字符串.
public string PreferredDrink(Drink someDrink)
{
var orderOfPreference = new List<Type> {
typeof (Cola),
typeof (PurpleDrank),
typeof (LemonLimeBitters)
...
}
foreach (drinkType in orderOfPreference) {
if (someDrink.GetType() == drinkType) {
return someDrink.ToString()
}
}
throw new Exception("Water will be fine thank you");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,因为类型someCola永远不能等于抽象类型.理想情况下,我想做的事情如下:
if (someCola is drinkType) ...
Run Code Online (Sandbox Code Playgroud)
但is关键字只允许后面的类名.
有没有其他方法来检查是否someDrink继承了给定的类型?
如果你能提出一个更好的方法,重构并不是完全不可能的.
我希望能够发现鼓掌声.对于任何形式的声音识别都是新手,有什么简单的方法可以做到这一点吗?如果没有,C#声音识别/检测的任何好资源?
我的目标是使用一些基于拍手的基本控件来自动化客户端媒体中心.
我使用Newtonsoft的Json.NET来反序列化JSON字符串:
var output = JsonConvert.DeserializeObject<dynamic>("{ 'foo': 'bar' }");
Run Code Online (Sandbox Code Playgroud)
我该怎么检查output是空的?一个示例测试用例:
var output = JsonConvert.DeserializeObject<dynamic>("{ }");
Assert.IsNull(output); // fails
Run Code Online (Sandbox Code Playgroud) 我正在尝试让我的 iPhone 在录音时振动。
我试过这个:
UInt32 category = kAudioSessionCategory_PlayAndRecord;
status |= AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
UInt32 allowMixing = true;
status |= AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryMixWithOthers, // 1
sizeof (allowMixing), // 2
&allowMixing // 3
);
status |= AudioSessionSetProperty(
kAudioSessionProperty_OtherMixableAudioShouldDuck, // 1
sizeof (allowMixing), // 2
&allowMixing // 3
);
Run Code Online (Sandbox Code Playgroud)
正如这里所建议的。然后稍后通过调用振动设备
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
Run Code Online (Sandbox Code Playgroud)
但它不起作用。但它不会振动。它记录良好,如果我在停止记录之前调用振动时刻,它会在停止后振动。
显然这是一个错误,有人知道解决方法吗?
我有一个TextBox,我试图将它绑定到一个DependencyProperty.该物业永远不会在装载或我输入时触及TextBox.我错过了什么?
XAML
<UserControl:Class="TestBinding.UsernameBox"
// removed xmlns stuff here for clarity>
<Grid>
<TextBox Height="23" Name="usernameTextBox" Text="{Binding Path=Username, ElementName=myWindow, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
C#
public partial class UsernameBox : UserControl
{
public UsernameBox()
{
InitializeComponent();
}
public string Username
{
get
{
// Control never reaches here
return (string)GetValue(UsernameProperty);
}
set
{
// Control never reaches here
SetValue(UsernameProperty, value);
}
}
public static readonly DependencyProperty UsernameProperty
= DependencyProperty.Register("Username", typeof(string), typeof(MainWindow));
}
Run Code Online (Sandbox Code Playgroud)
编辑:我需要实现一个DependencyProperty因为我正在创建自己的控件.