我无法返回null,因为我的Hlist
是不可为空的类型。我还可以在null处返回什么?
HList findHListentry(string letter)
{
if (string.IsNullOrWhiteSpace(letter))
{
HList result = listentry.Find(delegate(HList bk)
{
return bk.letter == letter;
});
return result;
}
else
{
return ?;
}
}
答案 0 :(得分:5)
改为使用Nullable<HList>
?
HList? findHListentry(string letter)
{
///
return null;
}
答案 1 :(得分:4)
有几种处理非可空值类型的方法:
Nullable<HList>
(简写名称为HList?
)或HList
条目,类似于Microsoft为Guid
定义的条目bool
而不是HList
,并通过HList
参数返回out
,方法是Dictionary.TryGetValue
使用特殊值:
struct HList {
public static HList Empty;
...
}
if (...) {
return HList.Empty;
}
返回bool
:
bool findHListentry(string letter, out HList res) {
...
}
答案 2 :(得分:1)
如果方法的输入真正不应为null
或空字符串,则可能会抛出异常:
HList findHListentry(string letter)
{
if (string.IsNullOrWhiteSpace(letter))
throw new ArgumentNullException("letter");
HList result = listentry.Find(
delegate(HList bk)
{
return bk.letter == letter;
}
);
return result;
}
(请注意,我也颠倒了条件逻辑,因为它听起来像是在寻找与问题标题相反的东西。)
您还可以查看Code Contracts以验证方法的前提条件,而不是手动检查输入并抛出异常。
答案 3 :(得分:0)
您有几个选择:
如果HList
是结构:
HList? findHListentry(string letter)
答案 4 :(得分:0)
您可能需要查看Nullable of T
答案 5 :(得分:0)
如果您不想返回null,则可以创建一个HList的静态实例,用于表示它是一个“空”值。
与EventArgs.Empty相似
public static readonly HList EmptyHList = new Hlist() { /* initialise */ };
答案 6 :(得分:0)
一种实现是提供非可空类型的Empty实例,并返回该实例以代替null。以字符串为例......虽然String是.NET中的可空类型,但它包含一个名为Empty的内置只读字段,因此使用String可以执行此操作:
if(mystring == null)
{
//My String Is Null
}
或者,你可以这样做
if(mystring == String.Empty)
{
//My String is Empty
}
虽然它可能不是最好的方法,但您可以在类/结构中添加一个空的HList实例。 e.g。
HList findHListentry(string letter)
{
if (string.IsNullOrWhiteSpace(letter))
{
HList result = listentry.Find(delegate(HList bk) { return bk.letter == letter; });
return result;
}
else
{
return HList.Empty;
}
}
public struct HList
{
public const HList Empty;
}
现在你可以用这个来代替null
if(myHList == HList.Empty)
{
//My HList is Empty
}