扩展方法:如何使它也与GUID一起工作



我使用这个扩展方法来转换项目中的对象。但它无法转换GUID,因为它没有实现IConvertible接口,但对于转换,我总是必须使用new Guid(fooobject),但我希望我可以使用此方法将对象转换为GUID。任何想法,我们如何使它灵活地与GUID一起工作。

扩展方法为

 public static T ToType<T>(this object val, T alt) where T : struct, IConvertible 
    {
        try
        {
            return (T)Convert.ChangeType(val, typeof(T));
        }
        catch
        {
            return alt;
        }
    }

因为您有一个约束,即您要转换为的类型实现IConvertible接口(而Guid结构没有),所以您没有选择创建重载,如下所示:

public static Guid ToType(this object val, Guid alt)
{
    try
    {
        // Convert here.
    }
    catch
    {
        return alt;
    }
}

当您通过Guid时,由于C#规范的第7.4.2节(强调矿),它将被解析:

一旦候选函数成员和参数列表已识别,最佳功能成员的选择与所有情况:

  • 给定一组适用的候选函数成员,即可定位该集合中的最佳函数成员

假设Guid是比类型参数T更具体的匹配,则将调用第二个方法。

注意,如果您删除了IConvertible接口约束,您可以在一个方法中处理它,但您必须能够有逻辑来处理为T传递的任何结构(TypeConverter实例在这里很方便)。

相关内容

  • 没有找到相关文章

最新更新