我正在编写一种方法,以便在控制台上为用户查询内容并获得他的答案......就像这样:
static T query<T>(String queryTxt)
{
Console.Write("{0} = ", queryTxt);
T result;
while (true)
{
try
{
result = // here should go the type casting of Console.ReadLine();
}
catch (FormatException e)
{
Console.WriteLine("Exception: {0};\r\nSource: {1}", e.Message, e.Source);
continue;
}
break;
}
return result;
}
简而言之,此方法应继续询问queryTxt
的值,其中T
始终为int
或double
...
有什么好方法吗?
提前致谢!
答案 0 :(得分:2)
如果它总是int或double使用double.Parse并且它将始终有效。
答案 1 :(得分:2)
public static T Query<T>() {
var converter = TypeDescriptor.GetConverter(typeof (T));
if (!converter.CanConvertFrom(typeof(String)))
throw new NotSupportedException("Can not parse " + typeof(T).Name + "from String.");
var input = Console.ReadLine();
while (true) {
try {
// TODO: Use ConvertFromInvariantString depending on culture.
return (T)converter.ConvertFromString(input);
} catch (Exception ex) {
// ...
}
}
}
答案 2 :(得分:1)
概括它的一种方法是将转换函数作为委托传递。类似的东西:
T query<T>(string text, Func<string, T> converter)
{... result = converter(Console.Readline())...}
query("foo", s=>Int.Parse(s));
对于更通用的方法 - 请阅读“广义类型转换” “http://msdn.microsoft.com/en-us/library/yy580hbd.aspx及相关文章。