有人能解释一下这种行为吗?
本文关键字:一下 能解释 | 更新日期: 2023-09-27 17:50:39
我不明白为什么
using System.Configuration;
ExeConfigurationFileMap temp = ExeConfigurationFileMap(CustomConfigFilePath)
不能工作。但是,下面一行运行良好。
ExeConfigurationFileMap temp = ExeConfigurationFileMap{ ExeConfigFilename = CustomConfigFilePath };
你自己检查一下。我使用。net 4.0在Windows 7 - 64位。我怀疑这是一个bug。
注意:不需要深潜。在这行后面放一个断点。在执行中,您可以看到第一种样式(如上所示)没有在变量"ExeConfigFilename"上添加任何值。但是第二种样式可以。
编辑:即使答案很好,我还是要投票结束这个案子。原因是它对任何人都没有用。它只是倾倒空间。所以,请投票结束这个
首先;我假设你的代码应该调用构造函数,但是你遗漏了new
关键字。
回答你的问题
ExeConfigurationFileMap temp = new ExeConfigurationFileMap(CustomConfigFilePath);
等价于:
ExeConfigurationFileMap temp = new ExeConfigurationFileMap
{
MachineConfigFilename = CustomConfigFilePath
};
构造函数参数是针对MachineConfigFilename
的,而不是您假设的ExeConfigFilename
的。
execconfigurationfilemap的源代码为:
public sealed class ExeConfigurationFileMap : ConfigurationFileMap
{
string _exeConfigFilename;
string _roamingUserConfigFilename;
string _localUserConfigFilename;
public ExeConfigurationFileMap(string machineConfigFileName)
: base(machineConfigFileName)
{
_exeConfigFilename = String.Empty;
_roamingUserConfigFilename = String.Empty;
_localUserConfigFilename = String.Empty;
}
public string ExeConfigFilename
{
get
{
return _exeConfigFilename;
}
set
{
_exeConfigFilename = value;
}
}
您可以看到如何通过属性和构造函数设置字段_exeConfigFilename
。
也许你的意思是:
ExeConfigurationFileMap temp
= new ExeConfigurationFileMap(){ ExeConfigFilename = CustomConfigFilePath };
第一个版本不能工作,因为构造函数将字符串作为参数赋值给与ExecConfigFilename
不同的成员。