我目前有一个Generic方法,它根据键从数据库中读取一个值,并返回该值的特定类型.
public T Get<T>(string key, T defaultValue)
{
var myparms = new List<SqlParameter>
{
new SqlParameter("@KEY", key),
};
const string getPropertyQuery = "SELECT SPARM_VALUE FROM SYSPARAMS WHERE SPARM_KEY = @KEY;";
var returnedValue = //Get value from Database
if (returnedValue == null)
{
return defaultValue; //Value does not exists so return default.
}
return (T)Convert.ChangeType(returnedValue, typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试返回TimeSpan类型时,我得到以下异常. Invalid cast from 'System.String' to 'System.TimeSpan'.
经过一番谷歌搜索后,我发现最常见的解决方案是使用TimeSpan.Parse
或TimeSpan.TryParse
方法.
我还找到了TimeSpan Structure.
public struct TimeSpan : IComparable, IComparable,
IEquatable, IFormattable
我的问题是为什么,为什么TimeSpan无法做到这一点.是因为它没有 …
我看到了以下引用:"不能保证将析构函数称为".这让我有点害怕
接着说,即使是try finally块也可能被中断,导致内存泄漏.它确实通过将您的代码放在CER(受约束的执行区域)或从中派生来提供解决方案CriticalFinalizerObject
.
我的问题是
CriticalFinalizerObject
,如果有的话?CriticalFinalizerObject
真的有用吗?似乎没有太多关于确保F#中的函数保持纯粹的在线.
要创建一个示例,有没有办法在F#中使printfn/IO纯净?