【发布时间】:2011-10-08 04:10:48
【问题描述】:
我有这个代码:
//Return null if the extension doesn't have the value, returns the value if it does.
private T? getValue<T>(IEnumerable<Extension> extension, string attributeName)
{
IEnumerable<Extension> ext = extension.Where(e => e.attributeName == attributeName);
if (ext.Count() > 0)
{
return (T)ext.First().Attribute;
}
return null;
}
我这样称呼它:
//This works:
retVal.byteValue= getValueFromExtension<byte>(u, "ByteToGet") ?? 0;
//This doesn't work:
getValueFromExtension<string>(u, "Text") ?? "";
我收到编译错误:“错误消息:”无法转换类型'字符串?'到'字符串'"
如何在不创建新方法的情况下有效地实现上面代码中的想法?
我觉得我正在检查它是否为空 ??运算符,因此,如果字符串为空,它将始终设置为空字符串。它是如何处理我对字节和整数的期望的,为什么不处理字符串呢?
仅供参考,上面的 byteValue 是 byte 类型,而不是 byte?。
【问题讨论】:
-
这段代码可以编译吗?我对
T?方法的返回类型感到困惑 -
什么是
getValueFromExtension? -
我不明白为什么你的方法甚至在没有
struct约束的情况下编译。 -
你为什么会有
string?,字符串可以为空。 -
@pikzen:
T?是Nullable<T>的简写,它有一个struct type constraint。