应该将字符串参数提升为超类型吗?

时间:2016-05-26 16:22:48

标签: c# .net visual-studio

我通过参数将不同的连接字符串传递给不同对象的方法:

public ConnectOrDie(string connectionString)
{
            if (string.IsNullOrEmpty(connectionString))
            {
                this._logger.ConfigurationNotFound();
                throw new ConfigurationErrorsException("Configuration string is not found.");
            }

}

为了支持DRY主体而不必在每次调用方法时检查string.IsNullOrEmpty 为它创建一个类型会被认为是一种好习惯,并在集中位置检查其有效性?

public class ConnectionString
{
   private string _value;
   public ConnectionString(string value)
  {
     if(string.IsNullOrEmpty(value) throw;
     _value = value;
  }
}

1 个答案:

答案 0 :(得分:0)

这样的事情:

struct ConnectionString : IEquatable<ConnectionString>
{
    readonly string _value;

    public string Value { get { return _value; } }

    public ConnectionString(string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            throw new ArgumentNullException(value);
        }

        _value = value;
    }

    public override bool Equals(object obj)
    {
        return base.Equals(obj is ConnectionString && Equals((ConnectionString)obj));
    }

    public bool Equals(ConnectionString other)
    {
        return this == other;
    }

    public static bool operator ==(ConnectionString left, ConnectionString right)
    {
        return left._value == right._value;
    }

    public static bool operator !=(ConnectionString left, ConnectionString right)
    {
        return left._value != right._value;
    }

    public override int GetHashCode()
    {
        return _value.GetHashCode();
    }

    public override string ToString()
    {
        return _value;
    }

    public static implicit operator ConnectionString(string value)
    {
        return new ConnectionString(value);
    }

    public static explicit operator string(ConnectionString value)
    {
        return value._value;
    }
}

您可以这样调用您的方法:ConnectOrDie("conn");

相关问题