版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
重构出一个switch语句的解释【难度:2级】:
答案1:
using System.Collections.Generic;
using System;
public class Kata
{
private readonly Status _status;
private readonly Dictionary<Status, string> _statusDescriptions = new Dictionary<Status, string>()
{
{ Status.Default, "I have never been set" },
{ Status.New, "I am new!" },
{ Status.Active, "I am active" },
{ Status.Deactivated, "I have been deactivated" }
};
public Kata()
{
_status = Status.Default;
}
public Kata(Status status)
{
_status = status;
}
public string GetStatusDescription()
{
if (!Enum.IsDefined(typeof(Status), _status)) throw new InvalidOperationException();
return _statusDescriptions[_status];
}
}
答案2:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private Dictionary<Status, string> _statusDescriptions;
public Kata()
{
_statusDescriptions = new Dictionary<Status, string>()
{
{Status.Default, "I have never been set"},
{Status.New , "I am new!"},
{Status.Active, "I am active"},
{Status.Deactivated, "I have been deactivated"}
};
}
public Kata(Status status) : this()
{
_status = status;
}
public string GetStatusDescription()
{
if(!_statusDescriptions.ContainsKey(_status))
{
throw new InvalidOperationException("Invalid status encountered");
}
return _statusDescriptions[_status];
}
}
答案3:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private readonly Dictionary<Status, string> _statusDescriptions = new Dictionary<Status, string>()
{
{Status.Default, "I have never been set" },
{Status.New, "I am new!" },
{Status.Active, "I am active" },
{Status.Deactivated, "I have been deactivated" }
};
public Kata()
{
}
public Kata(Status status)
{
_status = status;
}
public string GetStatusDescription()
{
try
{
return _statusDescriptions[_status];
}
catch(Exception ex)
{
throw new InvalidOperationException("Invalid status encountered");
}
}
}
答案4:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private readonly Dictionary<Status, string> _statusDescriptions = new Dictionary<Status, string>() {
{Status.Default, "I have never been set"},
{Status.New, "I am new!"},
{Status.Active, "I am active"},
{Status.Deactivated, "I have been deactivated"}
};
public Kata()
{
}
public Kata(Status status)
{
_status = status;
}
public string GetStatusDescription()
{
string value;
if (_statusDescriptions.TryGetValue(_status, out value)) {
return value;
}
throw new InvalidOperationException("Invalid status encountered");
}
}
答案5:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private readonly Dictionary<Status, string> _statusDescriptions = new Dictionary<Status, string>();
public Kata()
{
_statusDescriptions.Add(Status.Default, "I have never been set");
_statusDescriptions.Add(Status.New, "I am new!");
_statusDescriptions.Add(Status.Active, "I am active");
_statusDescriptions.Add(Status.Deactivated, "I have been deactivated");
}
public Kata(Status status)
{
_status = status;
_statusDescriptions.Add(Status.Default, "I have never been set");
_statusDescriptions.Add(Status.New, "I am new!");
_statusDescriptions.Add(Status.Active, "I am active");
_statusDescriptions.Add(Status.Deactivated, "I have been deactivated");
}
public string GetStatusDescription()
{
var message = "";
foreach(KeyValuePair<Status, string> st in _statusDescriptions)
{
if (st.Key == _status)
{
message = st.Value;
}
}
if(message == ""){
throw new InvalidOperationException("Invalid status encountered");
}
return message;
}
}
答案6:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private static readonly Dictionary<Status, string> _statusDescriptions = new Dictionary<Status, string>
{
{ Status.Default, "I have never been set" },
{ Status.New, "I am new!" },
{ Status.Active, "I am active" },
{ Status.Deactivated, "I have been deactivated" },
};
public Kata()
{
}
public Kata(Status status)
{
_status = status;
}
public string GetStatusDescription()
{
if (!_statusDescriptions.ContainsKey(_status)) throw new InvalidOperationException("Status does not have description");
return _statusDescriptions[_status];
}
}
答案7:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
public Kata()
{
}
public Kata(Status status)
{
_status = status;
}
private readonly Dictionary<Status, string> _statusDescriptions = new Dictionary<Status, string>
{
{Status.Default, "I have never been set"},
{Status.New, "I am new!"},
{Status.Active, "I am active"},
{Status.Deactivated, "I have been deactivated"}
};
public string GetStatusDescription()
{
if (_statusDescriptions.ContainsKey(_status))
{
return _statusDescriptions[_status];
}
throw new InvalidOperationException("Invalid status encountered");
}
}
答案8:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private readonly Dictionary<Status, string> _statusDescriptions;
public Kata()
{
_statusDescriptions = new Dictionary<Status, string>();
_statusDescriptions.Add(Status.Default, "I have never been set");
_statusDescriptions.Add(Status.New, "I am new!");
_statusDescriptions.Add(Status.Active, "I am active");
_statusDescriptions.Add(Status.Deactivated, "I have been deactivated");
}
public Kata(Status status) : this()
{
_status = status;
}
public string GetStatusDescription()
{
try
{
return _statusDescriptions[_status];
}
catch(Exception)
{
throw new InvalidOperationException();
}
}
}
答案9:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private readonly Dictionary<Status, string> _statusDescriptions;
public Kata()
{
}
public Kata(Status status)
{
_status = status;
}
public string GetStatusDescription()
{
switch (_status)
{
case Status.Default:
return "I have never been set";
case Status.New:
return "I am new!";
case Status.Active:
return "I am active";
case Status.Deactivated:
return "I have been deactivated";
default:
throw new InvalidOperationException("Invalid status encountered");
}
}
}
答案10:
using System;
using System.Collections.Generic;
public class Kata
{
private readonly Status _status;
private readonly Dictionary<Status, string> _statusDescriptions = new Dictionary<Status, string>
{
{ Status.Default, "I have never been set" },
{ Status.New, "I am new!" },
{ Status.Active, "I am active" },
{ Status.Deactivated, "I have been deactivated" }
};
public Kata(Status status = Status.Default)
{
_status = status;
}
public string GetStatusDescription()
{
string text;
if (! this._statusDescriptions.TryGetValue(this._status, out text))
throw new InvalidOperationException();
return text;
}
}