【发布时间】:2026-01-28 13:50:02
【问题描述】:
我对以下方法有几个问题。专家能否帮助我了解结构以及我收到错误的原因?
我有这个方法会得到一个xml元素,搜索name参数中指定的属性,在xml中找不到case,它返回默认值:
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, "search", "default value"); 类型“字符串”必须是不可为空的值类型,才能将其用作泛型类型或方法“GetValue(XElement, string, T)”中的参数“T”
这个方法是什么,我得到那个错误的问题是什么?是什么意思?我尝试将其用作 GetValue,但效果不佳...
非常欢迎任何帮助!谢谢!
【问题讨论】:
-
where T : struct字符串不是结构体 -
string不是struct。看起来该方法仅适用于枚举。你想做的事就做string text = (string)element.Attribute("search") ?? "default value"; -
你应该阅读一些关于约束的内容,例如这里Constraints on Type Parameters (C# Programming Guide)
-
@Rahul 是的,有时我的 cmets 过火了。
-
@thehennyy 谢谢!我不知道那个名字。我会阅读更多相关信息!再次感谢!