文字列の式を演算したいと思う場合が結構あります。
DataTable.Compute()メソッドで実現できることが分かったので、実装して見ました。
以下が作成したメソッドです。string型の拡張メソッドになっています。
public static T Calc<T>(this string s, params object[] args) {
using (DataTable dt = new DataTable()) {
s = string.Format(s, args);
object result = dt.Compute(s, “”);
var converter = TypeDescriptor.GetConverter(typeof(T));
return (T)converter.ConvertFromString(result.ToString());
}
}
以下のように使うと、(2+4)/2の数値演算を行い、3を返します。
var value = “({0} + {1}) / 2″.Calc<double>(2,4);
以下のように使うと、2>=4の論理演算を行い、falseを返します。
var value = “{0} >= {1}”.Calc<bool>(2,4);
簡単ですね。