这是我编写的代码,它是一个扩展,用于通过指定的强制转换
从字典中获取值public static TResult GetValue<TKey, TValue, TResult>(this Dictionary<TKey, TValue> dictionary, TKey key)
{
if (!dictionary.ContainsKey(key))
{
return default(TResult);
}
return dictionary[key] as TResult;
}
错误表明,
错误1类型参数'TResult'不能与'as'运算符一起使用,因为它没有类类型约束,也没有'class'约束
无法找到实现此目的的方法。
我只需要从方法中指定我需要它作为返回类型的类型。所以我需要使用这种泛型类型来转换字典值。
请帮助我!
提前致谢。
答案 0 :(得分:3)
您需要告诉编译器和API的用户TResult
将是引用类型的名称,而不是值类型的名称:
public static TResult GetValue<TKey, TValue, TResult>(this Dictionary<TKey, TValue> dictionary, TKey key)
where TResult : class {
...
}
这是让您使用as TResult
运算符所必需的。如果您希望为值类型提供类似的功能,请添加一个单独的函数,该函数采用值TResult
的值类型,然后返回Nullable<TResult>
:
public static TResult? GetNullableValue<TKey, TValue, TResult>(this Dictionary<TKey, TValue> dictionary, TKey key)
where TResult : struct {
...
}
答案 1 :(得分:2)
as关键字仅对引用类型\ nnullables有效。
如果您想要限制,请使用强制转换运算符或添加where TResult : class
约束。
public static TResult GetValue<TKey, TValue, TResult>(this Dictionary<TKey, TValue> dictionary, TKey key)
{
if (!dictionary.ContainsKey(key))
{
return default(TResult);
}
return (TResult)dictionary[key];
}
答案 2 :(得分:1)
编译器对body {
background: #6cab26;
background-image: url(IMAGE_URL); /* fallback */
background-image: url(IMAGE_URL), -webkit-gradient(linear, left top, left bottom, from(#6cab26), to(#6ceb86)); /* Saf4+, Chrome */
background-image: url(IMAGE_URL), -webkit-linear-gradient(top, #6cab26, #6ceb86); /* Chrome 10+, Saf5.1+ */
background-image: url(IMAGE_URL), -moz-linear-gradient(top, #6cab26, #6ceb86); /* FF3.6+ */
background-image: url(IMAGE_URL), -o-linear-gradient(top, #6cab26, #6ceb86); /* Opera 11.10+ */
background-image: url(IMAGE_URL), linear-gradient(to bottom, #6cab26, #6ceb86); /* W3C */
}
一无所知。尝试添加TResult
:
where TResult: class
但是** ** chglurps *评论说,最好使用public static TResult GetValue<TKey, TValue, TResult>(
this Dictionary<TKey, TValue> dictionary, TKey key
) where TResult: class
。