我在以下方法中几乎没有问题。专家能帮我理解结构以及我收到错误的原因吗?
我有这个方法将获取一个xml元素,搜索name参数中指定的属性,而case无法在xml中查找,它返回默认值:
protected static T GetValue<T>(XElement group, string name, T default) where T : struct
{
//Removed some code for better view
XAttribute setting = group.Attribute(name);
return setting == null ? default: (T)Enum.Parse(typeof(T), setting.Value);
}
我的问题是关于此方法中使用的泛型类型。当我尝试在字符串变量中使用此方法时,我收到以下错误:
string test = GetValue(element,&#34; search&#34;,&#34;默认值&#34;); 类型&#39;字符串&#39;必须是不可为空的值类型才能将其用作参数&#39; T&#39;通用类型或方法&#39; GetValue(XElement,string,T)&#39;
这个方法的问题是什么?我遇到了这个错误的问题? T:struct的意思是什么?我试图将它用作GetValue,它也不能正常工作......
真的欢迎任何帮助!谢谢!
答案 0 :(得分:2)
where T : struct
是对通用类型T
的约束,这意味着它必须是struct
。由于string
不是struct
,并且您传递的是string
,即"default value"
,您将收到错误。
答案 1 :(得分:1)
string
, struct
不是where T : struct
。看起来该方法仅用于基于Enum.Parse
的使用的枚举。对于你想做的事情
string text = (string)element.Attribute("search") ?? "default value";
您可以使用大多数值类型执行类似的操作
int value = (int?)element.Attribute("intAttribute") ?? -1;
查看XAttribute
文档,了解可以明确转换为哪些类型。
然而,这不适用于转换为枚举,这可能是编写该方法的原因。