我是新来的C#和从未试图创建一个try catch块,我正在那里的错误表示"一键已经存在",在HybridDictionary的一个错误,我怎样才能把.Adds在try catch块,并忽略如果密钥已经存在:
这是2个HybridDictionaries的原始代码:
public MWRichTextBox() : base() {
// Initialize default text and background colors
textColor = RtfColor.Black;
highlightColor = RtfColor.White;
// Initialize the dictionary mapping color codes to definitions
rtfColor = new HybridDictionary();
rtfColor.Add(RtfColor.Aqua, RtfColorDef.Aqua);
rtfColor.Add(RtfColor.Black, RtfColorDef.Black);
rtfColor.Add(RtfColor.Blue, RtfColorDef.Blue);
rtfColor.Add(RtfColor.Fuchsia, RtfColorDef.Fuchsia);
rtfColor.Add(RtfColor.Gray, RtfColorDef.Gray);
rtfColor.Add(RtfColor.Green, RtfColorDef.Green);
rtfColor.Add(RtfColor.Lime, RtfColorDef.Lime);
rtfColor.Add(RtfColor.Maroon, RtfColorDef.Maroon);
rtfColor.Add(RtfColor.Navy, RtfColorDef.Navy);
rtfColor.Add(RtfColor.Olive, RtfColorDef.Olive);
rtfColor.Add(RtfColor.Purple, RtfColorDef.Purple);
rtfColor.Add(RtfColor.Red, RtfColorDef.Red);
rtfColor.Add(RtfColor.Silver, RtfColorDef.Silver);
rtfColor.Add(RtfColor.Teal, RtfColorDef.Teal);
rtfColor.Add(RtfColor.White, RtfColorDef.White);
rtfColor.Add(RtfColor.Yellow, RtfColorDef.Yellow);
rtfColor.Add(RtfColor.WhiteSmoke, RtfColorDef.WhiteSmoke);
// Initialize the dictionary mapping default Framework font families to
// RTF font families
rtfFontFamily = new HybridDictionary();
rtfFontFamily.Add(FontFamily.GenericMonospace.Name, RtfFontFamilyDef.Modern);
rtfFontFamily.Add(FontFamily.GenericSansSerif, RtfFontFamilyDef.Swiss);
rtfFontFamily.Add(FontFamily.GenericSerif, RtfFontFamilyDef.Roman);
rtfFontFamily.Add(FF_UNKNOWN, RtfFontFamilyDef.Unknown);
// Get the horizontal and vertical resolutions at which the object is
// being displayed
using(Graphics _graphics = this.CreateGraphics()) {
xDpi = _graphics.DpiX;
yDpi = _graphics.DpiY;
}
}
Run Code Online (Sandbox Code Playgroud)
Gra*_*mas 16
作为替代,以一个包罗万象的 qaundary,我建议,如果通过的方式通过键存在的项目检查Contains方法.例如:
if (!rtfColor.Contains(RtfColor.White))
{
rtfColor.Add(RtfColor.White, RtfColorDef.White);
}
Run Code Online (Sandbox Code Playgroud)
让我们进一步说明Jim B的建议(因为这确实会为每个添加引入额外的行并且很快就会变得势不可挡),我们可以创建一个简单的方法来"安全地添加项目",也就是说,只有在项目中添加项目具有特定键的项目尚不存在(您可以在方法命名和访问等方面应用更多特殊性,但作为示例):
private void AddItemToDictionary(HybridDictionary dictionary, object key, object value)
{
if (!dictionary.Contains(key))
{
dictionary.Add(key, value);
}
}
AddItemToDictionary(rtfColor, RtfColor.Black, RtfColorDef.Black);
AddItemToDictionary(rtfColor, RtfColor.White, RtfColorDef.White);
AddItemToDictionary(rtfColor, RtfColor.Red, RtfColorDef.Red);
Run Code Online (Sandbox Code Playgroud)
如有必要,这可以简单地扩展到更新.
何时使用try/catch是另一种故事,何时使用try/catch来忽略错误是另一种生命.