有人能解释一下这种行为吗?

本文关键字:一下 能解释 | 更新日期: 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不同的成员。