";类型';字符串';必须是不可为null的通用方法"
本文关键字:quot null 方法 字符串 类型 | 更新日期: 2023-09-27 18:01:00
我对以下方法有一些问题。专家能帮助我理解结构吗?为什么我会出错?
我有一个方法,它将获得一个xml元素,搜索name参数中指定的属性,如果在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(元素,"搜索","默认值"(;类型"string"必须是不可为null的值类型,才能将其用作泛型类型或方法"GetValue(XElement,string,T("中的参数"T">
这个方法是什么?我得到那个错误的问题是什么?T:struct是什么意思?我尝试将其用作GetValue,但效果不佳。。。
欢迎任何帮助!谢谢
where T : struct
是泛型类型T
的约束,意味着它必须是struct
。由于string
不是struct
,并且您正在传递string
,即"default value"
,因此您将得到错误。
string
不是一般约束where T : struct
的struct
。看起来该方法仅用于基于Enum.Parse
使用的枚举。对于你想要的,只需做
string text = (string)element.Attribute("search") ?? "default value";
您可以对大多数值类型以及执行类似操作
int value = (int?)element.Attribute("intAttribute") ?? -1;
查看XAttribute
文档,可以将其显式转换为哪些类型。
然而,这不适用于转换为枚举,这可能就是编写该方法的原因。