将值从字符串转换为Guid或int型的泛型类型
本文关键字:int 泛型类型 Guid 字符串 转换 | 更新日期: 2023-09-27 18:12:28
我有一个通用的方法,从字符串转换id(例如,从一个ASP上的HiddenField的值检索。. NET表单)到一个目标类型,并对它做一些事情。
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Convert.ChangeType(rawId, typeof(T));
doSomethingWithId(id);
}
T将是Guid或Int32,当它是Guid时,上面的代码(在运行时)会失效,说明从String到Guid的强制转换无效。
然后我想我可能会尝试检查类型,如果Guid,实例化一个新的Guid:
var id = default(T);
if (id is Guid)
id = new Guid(rawId);
else
id = (T)Convert.ChangeType(rawId, typeof(T));
现在给出一个错误(在编译时)Guid不能转换为类型T
不太确定如何解决这个问题。有什么建议吗?
下面的代码可以很好地转换为Guid。检查
id = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(text);
如果T
将是Guid
或Int32
,那么它不是真正的非常通用,是吗?只需编写两个方法——要么使用不同的名称,要么可能会重载。我看不出在这里使用泛型有什么好处,而且它很可能使您的代码比需要的更复杂。
您可以尝试这样做:
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Activator.CreateInstance(typeof(T), new object[] { rawId });
doSomethingWithId(id);
}