Я пытаюсь создать общий метод для загрузки настроек формы в .NET C#, где каждый параметр будет содержать собственный блок catch try (чтобы продолжить с другими настройками, когда один из них не является действует). Однако я не могу понять, как обойти назначение приложения к объекту. Учетщик не позволяет мне явно лить тип объекта.не может неявно преобразовывать System.Type в объект
private void LoadFormSettings(object o)
{
try
{
//Load settings when application is started
Type t = o.GetType();
// Operator '<' cannot be applied to operands of type 'method group' and 'System.Type'
o = getAppSetting<o.GetType()>("Setting");
// Cannot implicitly convert type 't' to 'object'
o = getAppSetting<t>("Setting");
// The type arguments for method... cannot be inferred from the usage. Try specifying the type arguments explicitly
o = getAppSetting("Setting");
}
catch (Exception ee)
{
}
}
private T getAppSetting<T>(string key)
{
string value = config.AppSettings.Settings[key].Value;
if (typeof(T) == typeof(Point))
{
string[] values = value.Split(',');
return (T) Convert.ChangeType(value, typeof(T));
}
}
Вы не можете использовать экземпляры класса 'Type' (значение, известное во время выполнения) как общие параметры (необходимо знать во время компиляции). Вместо этого вы можете сделать свой общий метод. – CodesInChaos
Ваш шаблон обработки исключений - не очень хорошая идея. 1) Вы ловите все исключения, а не только те, которых вы ожидаете. 2) Избегайте бросать эти исключения в первую очередь, например, используя «TryParse». – CodesInChaos