";类型';字符串';必须是不可为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,但效果不佳。。。

欢迎任何帮助!谢谢

";类型';字符串';必须是不可为null的通用方法"

where T : struct是泛型类型T的约束,意味着它必须是struct。由于string不是struct,并且您正在传递string,即"default value",因此您将得到错误。

string不是一般约束where T : structstruct。看起来该方法仅用于基于Enum.Parse使用的枚举。对于你想要的,只需做

string text = (string)element.Attribute("search") ?? "default value"; 

您可以对大多数值类型以及执行类似操作

int value = (int?)element.Attribute("intAttribute") ?? -1;

查看XAttribute文档,可以将其显式转换为哪些类型。

然而,这不适用于转换为枚举,这可能就是编写该方法的原因。