我知道尝试捕获已经讨论了很多,但我还没有找到解决我的问题的方法.
我正在编写一个Silverlight应用程序,其中每个异常都应该生成一个MessageBox,上面写着"抱歉给您带来的不便".
由于我无法保证我的代码可以免除异常,我的同事已经指示我尝试捕获每种方法(几百个),如下所示:
public void Method1()
{
try
{
...
}
catch (Exception e)
{
MessageBox.Show("Something went wrong, we apologize for the inconvenience. \n" + e.Message);
}
}
public void Method2()
{
try
{
...
}
catch (Exception e)
{
MessageBox.Show("Something went wrong, we apologize for the inconvenience. \n" + e.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
但它似乎太过分了.我已经读过一个不会以这种方式使用try catch加上会有很多重复的代码加上代码将被混淆并且难以阅读.
有没有像我可以使用的全球尝试捕捉的替代方案?
感谢名单!/麦克风
我的ViewModel中有一个模型对象集合.我希望能够将TabControl绑定到这些并使用DataTemplate从Model对象中提取信息.当我尝试这样做时,我得到errormessage:无法将Model类型的对象强制转换为TabItem类型的对象.花了一些时间寻找解决方案后,我发现了以下内容:
Silverlight TabControl已损坏.使用ListBox和ContentControl的组合来模仿TabControl的行为.(意味着我必须将ListBox设置为看起来像TabControl)
TabControl不会覆盖PrepareContainerForItemOverride,解决方案是创建一个转换器.(不太好,因为我需要在转换器中指定convertee的类型)
谁知道更好的解决方案?
XAML
<sdk:TabControl ItemsSource="{Binding Items, ElementName=MyControl}">
<sdk:TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</sdk:TabControl.ItemTemplate>
</sdk:TabControl>
Run Code Online (Sandbox Code Playgroud)
C#
public ObservableCollection<Model> Items { get; set; }
public ViewModel()
Items = new ObservableCollection<Model>{
new Model { Name = "1"},
new Model { Name = "2"},
new Model { Name = "3"},
new Model { Name = "4"}
};
}
Run Code Online (Sandbox Code Playgroud)
public class TabConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<TabSource> source …Run Code Online (Sandbox Code Playgroud) 我认为这对我的目的来说是实用的,但也有点令人困惑,因为人们可能希望获得与输入相同的输出.
@property
def value(self):
return next(
(option.key for option in self._options
if option.id == self._value),
None)
@value.setter
def value(self, value):
idoption = None
if isinstance(value, Option):
idoption = next(
(option.id for option in self._options
if option.id == value.id), None)
elif isinstance(value, int):
idoption = next(
itertools.chain(
(option.id for option in self._options
if option.key == value),
(option.id for option in self._options
if option.id == value)
), None)
elif isinstance(value, str):
idoption = next(
(option.id for option in self._options
if option.key == …Run Code Online (Sandbox Code Playgroud) silverlight ×2
binding ×1
c# ×1
collections ×1
datatemplate ×1
global ×1
python ×1
return-value ×1
tabcontrol ×1
try-catch ×1