隐式强制转换为Guid的通用方法

时间:2013-05-03 13:01:29

标签: c# generics guid

我实际上有一种从Feature对象的特殊数据行读取值的方法:

    private static T GetRowValueByMethod<T>(Feature feature, string fieldName)
    {
        return (T) feature.GetDataRow(fieldName)[fieldName];
    }

这适用于大多数值,但Guid我遇到了问题。如果该字段包含System.Guid对象,那么一切都很好。但如果它包含一个字符串值,那么我得到一个错误,因为Guid不能从字符串中隐式转换。

要从字符串中获取Guid对象,必须通过Guid构造函数创建新的Guid对象。 但是这里不允许返回Guid对象。 无法创建新的T对象。 创建Guid对象并转换为T也是不可能的。那该怎么办?

我试过类似的东西,但这不起作用(警告:假代码)

    private static T GetRowValueByMethod<T>(Feature feature, string fieldName)
    {
        var obj = feature.GetDataRow(fieldName)[fieldName];
        if (obj.ToString().IsAGuid())
        {
            return (T) new Guid(obj.ToString());
        }

        return (T) obj;
    }

有没有人有这方面的好解决方案?

1 个答案:

答案 0 :(得分:2)

您正在尝试将Guid投射到T。由于没有从Guid转换为T,因此无法进行此操作。如果您首先将Guid值放入object

,它就会有效

试试这个:

private static T GetRowValueByMethod<T>(Feature feature, string fieldName)
{
    object obj = feature.GetDataRow(fieldName)[fieldName];
    if (obj.ToString().IsAGuid())
        obj = new Guid(obj.ToString());
    return (T)obj;
}