"Code Re-entrancy"和"Thread Safety"的概念有什么区别?根据下面提到的链接,一段代码可以是它们中的任何一个,它们都是,或者都不是.
我无法清楚地理解解释.帮助将不胜感激.
我试图实现从配置文件中读取节的通用方法.配置文件可能包含"标准"部分或"自定义"部分,如下所示.
<configuration>
<configSections>
<section name="NoteSettings" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<appSettings>
<add key="AutoStart" value="true"/>
<add key="Font" value="Verdana"/>
</appSettings>
<NoteSettings>
<add key="Height" value="100"/>
<add key="Width" value="200"/>
</NoteSettings>
Run Code Online (Sandbox Code Playgroud)
我尝试的方法如下:
private string ReadAllSections()
{
StringBuilder configSettings = new StringBuilder();
Configuration configFile = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
foreach (ConfigurationSection section in configFile.Sections)
{
configSettings.Append(section.SectionInformation.Name);
configSettings.Append(Environment.NewLine);
if (section.GetType() == typeof(DefaultSection))
{
NameValueCollection sectionSettings = ConfigurationManager.GetSection(section.SectionInformation.Name) as NameValueCollection;
if (sectionSettings != null)
{
foreach (string key in sectionSettings)
{
configSettings.Append(key);
configSettings.Append(" : ");
configSettings.Append(sectionSettings[key]);
configSettings.Append(Environment.NewLine);
}
}
} …
Run Code Online (Sandbox Code Playgroud) 为了清理测试文件,我尝试执行以下操作.但它不清除文件以及不生成错误.
我错过了一些明显的东西吗
private void CleanUpTempDirFiles()
{
var fileGenerationDir = new DirectoryInfo(Path.Combine(Path.GetTempPath(), "TestFilesDir"));
fileGenerationDir.GetDirectories().ToList().ForEach(dir => dir.GetFiles().ToList().ForEach(file => file.Delete()));
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码示例:
public class Base
{
public virtual void MyMethod(int param)
{
Console.WriteLine("Base:MyMethod - Int {0}", param);
}
}
public class Derived1 : Base
{
public override void MyMethod(int param)
{
Console.WriteLine("Derived1:MyMethod - Int {0}", param);
}
public void MyMethod(double param)
{
Console.WriteLine("Derived1:MyMethod - Double {0}", param);
}
}
class Program
{
static void Main(string[] args)
{
Base objB = new Base();
objB.MyMethod(5);
Base objBD = new Derived1();
objBD.MyMethod(5);
Derived1 objD = new Derived1();
objD.MyMethod(5);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出如下:
基地:MyMethod - …
从ValueType类的MSDN链接引用
如果值类型必须像对象一样运行,则在堆上分配使值类型看起来像引用对象的包装器,并将值类型的值复制到其中.标记包装器,以便系统知道它包含值类型.
这意味着我的代码就像"integerVariable.ToString();" 创建的包装器对象允许使用此方法,类似于System.Object的所有其他方法.
这种理解是否正确?
这些对象与"常规"对象有何不同?
垃圾收集是否与此类对象不同?如果有,怎么样?
提前致谢.
在应用程序中,当创建特殊类型的对象时,我需要为每个对象生成唯一ID.这些对象是在工厂中创建的,很有可能在"批量"操作中创建.我意识到框架中的"随机"毕竟不是那么"随机",所以我尝试将时间戳添加如下:
private string GenerateUniqueId()
{
Random randomValue = new Random();
return DateTime.Now.Ticks.ToString() + randomValue.Next().ToString();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使这样也行不通.对于快速连续创建的对象,我生成相同的唯一ID :-(
目前,我正在以粗暴的方式实施如下:
private string GenerateUniqueId()
{
Random randomValue = new Random();
int value = randomValue.Next();
Debug.WriteLine(value.ToString());
Thread.Sleep(100);
return DateTime.Now.Ticks.ToString() + value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
由于这不是一个非常大的应用程序,我认为一个简单快速的技术就足够了,而不是实现一个复杂的算法.
请建议.
我正在尝试解析XML文件的目录,然后在给定节点存在时选择特定属性的值.我无法理解以下F#导致的编译错误的原因.
open System
open System.IO
open System.Xml
open System.Xml.XPath
open System.Xml.Linq
let configRootDirectory = @"C:\dir"
let relativeProductDir = @"relDir"
let ExtractConfiguredCalculator (productConfigFile:string) =
let xmlNavigator = XPathDocument(productConfigFile).CreateNavigator()
let node = xmlNavigator.SelectSingleNode(@"Product/SupportedRisk/Risk[@type='PV']")
node.GetAttribute("methodology", "")
let configFile = Directory.GetFiles(Path.Combine(configRootDirectory, relativeProductDir), @"*.xml")
|> Seq.cast<string>
|> Seq.iter(fun configFileName -> ExtractConfiguredCalculator(configFileName))
|> Seq.filter(fun configuredCalculatorNode -> configuredCalculatorNode != null)
|> Seq.iter(fun calculator -> Console.WriteLine(calculator))
Run Code Online (Sandbox Code Playgroud)
上面的代码片段来自我在LinqPad中尝试的代码.看到的错误信息如下.
This expression was expected to have type unit but here has type string
Run Code Online (Sandbox Code Playgroud)
更新 尝试获得更多f#-ish.如果可以改进,请建议.
let configFile =
Directory.GetFiles(Path.Combine(configRootDirectory, relativeProductDir), @"*.xml") …
Run Code Online (Sandbox Code Playgroud)