将值从字符串转换为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或int型的泛型类型

下面的代码可以很好地转换为Guid。检查

id = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(text);

如果T将是GuidInt32,那么它不是真正的非常通用,是吗?只需编写两个方法——要么使用不同的名称,要么可能会重载。我看不出在这里使用泛型有什么好处,而且它很可能使您的代码比需要的更复杂。

您可以尝试这样做:

private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
    T id = (T)Activator.CreateInstance(typeof(T), new object[] { rawId });
    doSomethingWithId(id);
}