我一直在寻找解决方案已经有一段时间了,找不到任何接近的东西。
我想要达到的目标:
我有两个字符串,'a'和'b'。字符串'a'包含数据类型,例如“Boolean”
字符串b包含类似“1”或“False”的值,可以是任何内容
我希望能够将字符串'b'的值存储在一个变量中,该变量的数据类型为字符串'a'。
如果我想通过一个结果列表来计算结果列表,结果如下:
Foreach(var value in MyList)
{
if(!var ConvertTo a) //Result would be negative because for "1" for it is not a boolean value, however if 'a' is "Int32" the result would be true.
continue;
else
{//The value "False" is convertable to boolean, so the result would true
Create a variable with datatype boolean with the value 'false'.
}
}
或多或少我正在寻找一些扼杀黑客版本的TryParse()。
我在我的例子中使用了boolean,但这可以是任何数据类型。至少我应该能够处理至少以下数据类型:
我的问题:
是否有可能(尝试)将值转换为字符串中给出的任何数据类型?
我希望我的问题和例子很清楚,如果没有,请发表评论。
答案 0 :(得分:7)
您必须将字符串映射到某个类型。由于并非所有这些都是System.<yourType>
,我会考虑创建一个映射:
Dictionary<string, Type> types = new Dictionary<string, Type>();
types.Add("int", typeof(System.Int32);
//etc.
然后,使用Convert.ChangeType获取对象:
object myObj = Convert.ChangeType(b, types[a]);
如果您的类型映射中不存在该键,也许可以通过尝试获取类型来扩展它:
object myObj = Convert.ChangeType(b, Type.GetType("System." + a));
答案 1 :(得分:4)
一般来说,如果您知道类型名称,则可以执行此操作:
Type type = Type.GetType("System.Data.OleDb.OleDbParameter");
例如,,所以你必须知道该类型的全名。
这样说,如果你有一个从调用者设置的对象到某个值,你可以在对象上做GetType()
并得到它的实际类型。
如果“True”以字符串形式出现,则无法区分是否应该是bool或字符串。
答案 2 :(得分:0)
如果要使用Dispatcher
数据类型,则不能使用TimeSpan
。
一种替代方法是使用ChangeType()
:
TypeConverter.ConvertFrom()
与其他答案一样,它假定您知道要转换为哪种类型。