试试Catch Block

use*_*742 1 c# try-catch

我是新来的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来忽略错误是另一种生命.

  • 绝对喜欢这种做法.创建一个名为AddToDictionary()的方法,该方法检查密钥是否存在.如果没有; 添加它.如果确实如此; 要么跳过要么更新. (6认同)