我实际上有一个方法从一个特征对象的特殊数据行读取值:
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
转换为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;
}