1

我有一个名为“config”的类,它有一个名为“param”的私有字符串变量。

我需要从“config”类中获取“param”变量,有时是 int 类型,有时是 bool 类型或字符串。

据我了解,我需要在配置类中创建 3 个属性,每个属性都必须转换类型,如下所示:

第一个属性将字符串转换为 int,第二个属性将字符串转换为 bool,第三个属性为我获取字符串值。

该类应如下所示:

class Config
{
    private string param; 

   public int ParamAsInt
  {
    get 
    { 
        return int.Parse(param); 
    }
  }

  public bool ParamAsBool
  {
    get 
    { 
        return bool.Parse(param); 
    }
  }

  public string ParamAsString
  {
    get 
    { 
        return param; 
    }
  }

}

但是我不知道如何根据我想出类的变量类型来使用这些属性。

4

2 回答 2

4

此代码不会编译 -int这些是保留关键字,不能用作标识符。您可以尝试将属性命名为, 等,或者尝试以下Int32Value操作:StringValue

public static implicit operator bool (Config config)
{
    return bool.Parse(config.param);
}

public static implicit operator int (Config config)
{
    return int.Parse(config.param);
}

这将允许更简洁的代码:

Config c = GetConfig("foo");
var isFeatureEnabled = false || c;
var spacing = 23 + GetConfig("bar");
于 2012-07-10T09:40:36.350 回答
1

你忘了给你的属性名称。您希望如何引用它们?像这样的东西:

class Config
{
    private string param; 

    public int ParamAsInt
    {
        get 
        { 
            return int.Parse(param); 
        }
    }

    public bool ParamAsBool
    {
        get 
        { 
            return bool.Parse(param); 
        }
    }

    public string ParamAsString
    {
        get 
        { 
            return param; 
        }
    }
}

请注意,我还修复了您对.Parse(). C# 区分大小写。我也bool.TryParse()bool.Parse(). 前者(如果使用正确,这不是因为它缺少参数)只会告诉你它是否是a bool,它不会告诉你bool实际什么值。(例如,bool.TryParse('false' out someBool)将返回true。)

当然,这段代码有点危险。您需要从一些更具防御性的编程开始来检查这些值。基本上,查找TryParse()以及如何正确使用它。像这样的东西,例如:

public int ParamAsInt
{
    get 
    { 
        var tmp = default(int);
        if (int.TryParse(param, out tmp))
            return tmp;
        else
            // do something else? throw a specific exception? 
    }
}

另外,这段代码的目的是什么?这似乎是一个非常仓促和糟糕的设计。对于任何给定的值param(顺便说一句,它是如何设置的?)这只是随机尝试为其公开类型化的属性。如果您猜对了,那么您仍然会遇到其他会引发异常的人。当然,有一种清洁的方法来完成你想要做的事情。那想做什么?

于 2012-07-10T09:49:23.120 回答