有没有办法在switch语句中使用字符串资源?尝试以编程方式获取字符串资源后,将返回错误。
错误
'resourceLoader'是变量,但像类型一样使用
C#
public class PageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
Type page = null;
switch (value as string)
{
case resourceLoader.GetString("SteveJohnson/Text"):
page = typeof(FirstPage);
break;
case resourceLoader.GetString("PeteDavidson/Text"):
page = typeof(SecondPage);
break;
case resourceLoader.GetString("OneDrive/Text"):
page = typeof(FistPage);
break;
case resourceLoader.GetString("Twitter/Text"):
page = typeof(SecondPage);
break;
default:
break;
}
return page;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
我认为您需要退后一步,看看为什么要使用switch语句:可能要具有可读的代码块。您可以使用几个if()
s轻松地完成相同的操作:
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
Type page = null;
if (value == resourceLoader.GetString("SteveJohnson/Text"))
page = typeof(FirstPage);
else if (value == resourceLoader.GetString("PeteDavidson/Text"))
page = typeof(SecondPage);
else if (value == resourceLoader.GetString("OneDrive/Text"))
page = typeof(FistPage);
else if (value == resourceLoader.GetString("Twitter/Text"))
page = typeof(SecondPage);
return page;
现在您可以使用patternwhen
子句将其重写以将其替换为一个开关,但是我认为这不是合适的结构,因为它并没有真正提高可读性。您可以选择带有选项的词典:
var pageTypes = new Dictionary<string, Type>
{
{ resourceLoader.GetString("SteveJohnson/Text"), typeof(FirstPage) },
{ resourceLoader.GetString("PeteDavidson/Text"), typeof(SecondPage) },
{ resourceLoader.GetString("OneDrive/Text"), typeof(FirstPage) },
{ resourceLoader.GetString("Twitter/Text"), typeof(SecondPage) },
};
// Defaults to `null` when not mached
pageTypes.TryGetValue((string)value, out Type page);
return page;
您甚至可以通过初始化一次此字典来缓存资源查找,例如在包含类的构造函数中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句