我想创建一个接受值类型和引用类型参数的简单方法,即int是value,string是reference.
所以这就是我的开始:
public bool areBothNotNull<T>(T? p1, T? p2)
{
return (p1.HasValue && p2.HasValue);
}
Run Code Online (Sandbox Code Playgroud)
所以我希望能够像这样使用它:
var r1 = areBothNotNull<int>(3, 4); // will be true
var r2 = areBothNotNull<int>(3, null); // will be false
var r3 = areBothNotNull<string>("three", "four"); // will be true
var r4 = areBothNotNull<string>(null, "four"); // will be false
Run Code Online (Sandbox Code Playgroud)
但我遇到的第一个问题是
类型'T'必须是非可空值类型才能在泛型类型或方法'System.Nullable'中将其用作参数'T'
为了继续,我向我的方法添加一个struct约束
public bool areBothNotNull<T>(T? p1, T? p2) where T : struct
Run Code Online (Sandbox Code Playgroud)
但是现在该方法不接受基于字符串的调用,并给出了这个错误:
类型'string'必须是非可空值类型,以便在泛型类型或方法中将其用作参数'T'.
这可能吗?或者为什么我们阻止这样做?
我正在开发一个代码库,它有很多相同的ConfigurationManager.AppSetting调用.
这听起来像是一个可能的性能问题吗?
或者因为数据非常小是微不足道而且不"昂贵"?不断返回文件获取数据,或.NET运行时缓存文件/值/调用?
如果这不是性能问题,那么它只是一种访问应用程序配置值的无组织方法,应该重新考虑是为了更清晰,更一致地实现访问设置吗?