我已经创建了一个程序,我希望根据运行时方法得到的参数类型转换所有值,我想要的是转换用户在文本框中输入的所有值的define参数类型。 我想要的是
private object convertType(Type type, string value)
{
Type t = typeof(int);
//suppose value have stringvalue=33;
return 33; //of type int
}
有没有办法获得任何对象类型?
更新了答案
代表@Atmane EL BOUACHRI,
class Program
{
static void Main()
{
var ints = ConvertType<int>("33");
var bools = ConvertType<bool>("false");
var decimals = ConvertType<decimal>("1.33m"); // exception here
Console.WriteLine(ints);
Console.WriteLine(bools);
Console.WriteLine(decimals);
Console.ReadLine();
}
public static T ConvertType<T>(string input)
{
T result = default(T);
var converter = TypeDescriptor.GetConverter(typeof(T));
if (converter != null)
{
try
{
result = (T)converter.ConvertFromString(input);
}
catch
{
// add you exception handling
}
}
return result;
}
}
我不想要硬代码<int>
,<string>
或<decimal>
,我想要的是
private object convertToAnyType(Type type, string value)
{
//Type t = typeof(int);
return ConvertType<type>("33");
}
有什么办法吗?
答案 0 :(得分:1)
你的意思是肯定会返回解析为特定Type的字符串值。然后,我提出了泛型。方法如下:
1) - 没有泛型(我更喜欢2中的泛型) - )
class Program
{
static void Main()
{
var ints = (int)ConvertType(typeof(int),"33");
var bools = (bool)ConvertType(typeof(bool), "true");
Console.WriteLine(bools);
Console.WriteLine(ints);
Console.ReadLine();
}
public static object ConvertType(Type type, string input)
{
object result = default(object);
var converter = TypeDescriptor.GetConverter(type);
if (converter != null)
{
try
{
result = converter.ConvertFromString(input);
}
catch
{
// add you exception handling
}
}
return result;
}
}
2) - 与通用
class Program
{
static void Main()
{
var ints = ConvertType<int>("33");
var bools = ConvertType<bool>("false");
var decimals = ConvertType<decimal>("1.33m"); // exception here
Console.WriteLine(ints);
Console.WriteLine(bools);
Console.WriteLine(decimals);
Console.ReadLine();
}
public static T ConvertType<T>(string input)
{
T result = default(T);
var converter = TypeDescriptor.GetConverter(typeof(T));
if (converter != null)
{
try
{
result = (T)converter.ConvertFromString(input);
}
catch
{
// add you exception handling
}
}
return result;
}
}
Hpe it help