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