C#:如何在尝试从另一个程序集中使用设置变量之前确保它存在?
Posted
技术标签:
【中文标题】C#:如何在尝试从另一个程序集中使用设置变量之前确保它存在?【英文标题】:C#: How to make sure a settings variable exists before attempting to use it from another assembly? 【发布时间】:2011-06-06 13:49:27 【问题描述】:我有以下几点:
using CommonSettings = MyProject.Commons.Settings;
public class Foo
public static void DoSomething(string str)
//How do I make sure that the setting exists first?
object setting = CommonSettings.Default[str];
DoSomethingElse(setting);
【问题讨论】:
msdn.microsoft.com/en-us/library/… 【参考方案1】:根据CommomSettings.Default
是什么类型,简单的空检查应该没问题:
if(setting != null)
DoSomethingElse(setting);
如果您想在尝试检索设置之前进行检查,您需要发布 CommonSettings.Default 的类型。它看起来像一个字典,所以你可以逃脱:
if(CommonSettings.Default.ContainsKey(str))
DoSomethingElse(CommonSettings.Default[str]);
【讨论】:
我认为他更多的是询问如何确保设置存在,而不仅仅是检查它是否存在。 @Uwe - 你可能是对的。我无法从 OP 问题的措辞中看出。我也为那个案例添加了一些东西。 然而,它是一个 Settings.settings 文件被构造...我不认为它是一个字典类型,因为CommonSettings.Default.ContainsKey(...)
不在智能感知中。
这不适用于 Properties.Settings.Default。 @Salle55 提供了一个很好的解决方案,可以与下面的 Properties.Settings.Default 一起使用。
对我来说:CommonSettings.Default.Context.ContainsKey(str)
(VS 2019,.NET4.5)【参考方案2】:
您可以执行以下操作:
public static void DoSomething(string str)
object setting = null;
Try
setting = CommonSettings.Default[str];
catch(Exception ex)
Console.out.write(ex.Message);
if(setting != null)
DoSomethingElse(setting);
这将确保设置存在 - 您可以更进一步并尝试捕获确切的异常 - 例如 catch(IndexOutOfBoundsException ex)
【讨论】:
刚刚看到你的更新贾斯汀 - 你的解决方案看起来更干净:)【参考方案3】:这就是你的处理方式:
if(CommonSettings.Default.Properties[str] != null)
//Hooray, we found it!
else
//This is a 'no go'
【讨论】:
即使您之前没有设置过,这个条件也会成立。我想 OP 想知道这个设置以前设置过。【参考方案4】:try
var x = Settings.Default[bonusMalusTypeKey]);
catch (SettingsPropertyNotFoundException ex)
// Ignore this exception (return default value that was set)
【讨论】:
一些描述会很有用!【参考方案5】:如果您使用的是SettingsPropertyCollection
,您必须循环并检查您自己似乎存在哪些设置,因为它没有任何 Contains 方法。
private bool DoesSettingExist(string settingName)
return Properties.Settings.Default.Properties.Cast<SettingsProperty>().Any(prop => prop.Name == settingName);
【讨论】:
谢谢 salle55。做得好。对于没有使用 System.Configuration 的用户,请添加前缀 System.Configuration。到 SettingsProperty>以上是关于C#:如何在尝试从另一个程序集中使用设置变量之前确保它存在?的主要内容,如果未能解决你的问题,请参考以下文章