扩展方法:如何使其与GUID一起使用

时间:2012-08-06 06:41:23

标签: linq c#-4.0 extension-methods guid iconvertible

我正在使用此扩展方法来转换项目中的对象。但是它无法转换GUID因为它没有实现IConvertible接口但是对于转换我总是必须使用new Guid(fooobject)但我希望我可以使用此方法将对象转换为{{ 1}}。任何想法我们如何才能灵活地使用GUID

扩展方法是

GUID

1 个答案:

答案 0 :(得分:2)

因为你有一个约束,你要转换的类型实现IConvertible interface(而Guid structure)没有,你没有选择创建一个重载,如下所示:

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

当您传递Guid时,由于section 7.4.2 of the C# specification(强调我的),它会解决:

  

候选函数成员和参数列表一旦出现   确定后,最佳功能成员的选择是相同的   所有情况:

     
      
  • 给定适用的候选函数成员集,找到该集合中最佳的函数成员。
  •   

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

注意,如果删除了IConvertible接口约束,则可以在单个方法中处理此问题,但是您必须能够使用逻辑来处理任何结构。传递给T(一个TypeConverter实例在这里很方便。)