我的应用程序的app.config文件中有一些键可以容纳电子邮件设置.我目前正在开发的应用程序有几个地方我需要发送一封电子邮件(主要是在错误检查中让我们知道发生了一些不好的事情).为了更容易获取我需要它的设置(而不是回到app.config查找要使用的文本字符串,ConfigurationManager.AppSettings["SomeKey"].ToString()我创建了一个简单的静态类来容纳一些readonly属性,返回我需要的值.这是基本结构
internal static Class myClass
{
internal static string setting1
{
get { return ConfigurationManager.AppSettings["SomeKey"].ToString(); }
}
internal static string setting2
{
get { return ConfigurationManager.AppSettings["SomeOtherKey"].ToString(); }
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做是否可以接受?我找不到这个问题,但不禁想到我错过了什么.
附加信息:
我知道简单地使用Settings.Settings文件的方法.由于我工作的代码策略,我无法使用Settings.Settings文件,这将使我这样做的方式变得不必要.
编辑:通过"可接受"我的意思是它通常做或被认为是一个好主意?我意识到整个社区都不能推测我工作的可接受性.
我一直试图解决这个问题,这真的让我烦恼.我有一些看起来像这样的代码
static T MyFunction<T>(Func<T> action, int i, int i2)
{
...some code here
}
Run Code Online (Sandbox Code Playgroud)
当我需要调用此代码时,我尝试了这个
var result = MyFunction<List<string>>(MethodThatReturnsListofString(int number), 1,2)
Run Code Online (Sandbox Code Playgroud)
它失败说明最佳重载具有无效参数但是当我尝试以下操作时
var result = MyFunction<List<string>>(() => MethodThatReturnsListofString(int number), 1,2)
Run Code Online (Sandbox Code Playgroud)
它工作正常.在这种情况下,"()=>"的功能是什么.我认为()不能用于需要超过0 args的方法.
我有一些过程可以按顺序迭代一组大文件并从中提取信息来写入\更新我们的数据库。这些文件通常每个文件都有几千行,因此我构建了一个 Parallel.ForEach 来同时处理给定文件中的多行(由于需要按顺序应用每个文件,因此一次只处理一个文件)。现在我需要了解当前文件的大约处理量,以便我可以向管理层提供剩余运行时间的指示。到目前为止我有以下内容
public void MyProcess(FileItem file)
{
List<string> lines = file.GetLines(); //some process to get the lines to handle
long cntr = 0; //The counter to track
Parallel.ForEach(lines, crntLine =>
{
Console.Writeline(String.Format("Currently finished {0} out of {1} lines",cntr,lines.Count());
InterLocked.Increment(ref cntr);
//...Code to process crntLine here
});
}
Run Code Online (Sandbox Code Playgroud)
我根本不关心已处理哪些行,只关心总共处理了多少行,这样就可以回答它在当前文件中的位置有多远的问题。这会给我带来我正在寻找的可靠的东西吗?