我跟着解決此網站,提出了以下方法的建議:類型「字符串」必須是一個非空值類型,以便用它作爲參數「T」在通用類型或方法
public static T? GetElementValue<T>(this XElement xElement, string s)
where T : struct, IComparable
{
var result = new Nullable<T>();
try
{
if (string.IsNullOrEmpty(s) || s.Trim().Length > 0 || xElement.IsEmpty)
return result;
var element = xElement.Element(s);
if (element == null || element.IsEmpty)
return result;
var conv = TypeDescriptor.GetConverter(typeof(T));
result = (T)conv.ConvertFrom(element.Value);
}
catch (Exception ex)
{
ex.Message.WriteAsError();
}
return result;
}
但是當我嘗試使用它與string
我仍然得到以下錯誤: 類型'字符串'必須是一個不可爲空的值類型爲了使用它作爲泛型類型或方法中的參數'T'
有人可以告訴我爲什麼? Thx
有幾件事要注意:1)而不是檢查'string.IsNullOrEmpty(s)|| s.Trim()。Length> 0',而是隻檢查String.IsNullOrWhitespace(s)'。 2)你應該檢查變量'xElement',看它在使用之前是否爲空(因爲它可以)。 3)如果一個方法要吞噬異常,通常你想使它成爲'bool TryGetElementValue(...,out T?result){...}',這是首選模式(返回bool,將其命名爲與* Try *,並有一個out參數)。 –
您可能想限制IConvertible接口而不是IComparable接口,而不是IComparable接口。 – Magnus
我想用同樣的方法返回一個Nullable對象嗎? q.GetElementValue(「myIntCanBeNull」); –