任何人都能解释一下这种行为吗?

时间:2014-03-17 10:46:34

标签: c# .net windows

我无法理解为什么会这样做

using System.Configuration;
ExeConfigurationFileMap temp = ExeConfigurationFileMap(CustomConfigFilePath)

无效。但是,以下行正常运作。

ExeConfigurationFileMap temp = ExeConfigurationFileMap{ ExeConfigFilename = CustomConfigFilePath };

自己检查一下。我在Windows 7中使用.Net 4.0 - 64位。我怀疑这是一个错误。

注意:无需深度潜水。在这一行后放一个断点。在执行中,您可以看到第一个样式(在上面)没有在变量" ExeConfigFilename"上放置任何值。但第二种风格确实如此。

修改    尽管答案非常好,但我还是投票决定关闭它。原因是它对任何人都没用。它只是倾倒空间。所以,请投票结束这个。

3 个答案:

答案 0 :(得分:4)

首先;我假设您的代码应该调用构造函数,但是您错过了new关键字。

回答你的问题:

ExeConfigurationFileMap temp = new ExeConfigurationFileMap(CustomConfigFilePath);

相当于:

ExeConfigurationFileMap temp = new ExeConfigurationFileMap
{
     MachineConfigFilename = CustomConfigFilePath 
};

constructor argument适用于MachineConfigFilename,而不适用于您ExeConfigFilename

这可能是为什么一个有效,另一个无法获胜的。

答案 1 :(得分:0)

ExeConfigurationFileMap的源代码是:

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的方式。

答案 2 :(得分:0)

也许你的意思是以下。

    ExeConfigurationFileMap temp
    = new ExeConfigurationFileMap(){ ExeConfigFilename = CustomConfigFilePath };

第一个版本无效,因为将字符串作为参数的构造函数将其赋予与ExecConfigFilename不同的成员。