隐式强制转换为Guid的泛型方法

本文关键字:Guid 泛型方法 转换 | 更新日期: 2023-09-27 18:12:12

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

    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;
    }

有人有好的解决方案吗?

隐式强制转换为Guid的泛型方法

您正在尝试将Guid转换为T。这是不可能发生的,因为没有从GuidT的转换。如果您先将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;
}