让 AppSettingsReader 询问值的类型和 return 一个非特定类型的对象有什么意义?
What's the point in having AppSettingsReader ask for the value's type and return a no-specific-type object?
我不明白为什么框架公开
AppSettingsReader.GetValue,签名是:
public object GetValue(string key, Type type);
询问设置值的类型,returns非强制转换object
?!
询问类型而不公开泛型类型转换值有什么意义?!
我想知道为什么他们没有“完成”这项工作。
如果我们已经在谈论完成这项工作,也许下面应该是我们想要的:
public T GetValue<T>(string key, T defaultValue = default(T)) where T : class
{
object value = _appSettingsReader.GetValue(key, typeof(T));
T castedValue;
try
{
castedValue = (T) Convert.ChangeType(value, typeof(T));
}
catch (Exception)
{
castedValue = defaultValue;
}
return castedValue;
}
What's the point in asking for the type and not exposing a generic type-casted value ?!
嗯,我猜他们在泛型时代之前就写了那个代码。自 .NET 1.1 以来就存在此方法,因此绝对是前泛型。
询问类型的关键在于,在该方法的背后,它确实将值转换为正确的类型。它只是不暴露于外界。它必须知道如何读取 XML 并将其转换为特定类型。
当然,他们可以(也许应该)重写该代码,使其使用泛型。这将使我们所有人受益。
我不明白为什么框架公开 AppSettingsReader.GetValue,签名是:
public object GetValue(string key, Type type);
询问设置值的类型,returns非强制转换object
?!
询问类型而不公开泛型类型转换值有什么意义?!
我想知道为什么他们没有“完成”这项工作。
如果我们已经在谈论完成这项工作,也许下面应该是我们想要的:
public T GetValue<T>(string key, T defaultValue = default(T)) where T : class
{
object value = _appSettingsReader.GetValue(key, typeof(T));
T castedValue;
try
{
castedValue = (T) Convert.ChangeType(value, typeof(T));
}
catch (Exception)
{
castedValue = defaultValue;
}
return castedValue;
}
What's the point in asking for the type and not exposing a generic type-casted value ?!
嗯,我猜他们在泛型时代之前就写了那个代码。自 .NET 1.1 以来就存在此方法,因此绝对是前泛型。
询问类型的关键在于,在该方法的背后,它确实将值转换为正确的类型。它只是不暴露于外界。它必须知道如何读取 XML 并将其转换为特定类型。
当然,他们可以(也许应该)重写该代码,使其使用泛型。这将使我们所有人受益。