C# 如果字符串在c中有null或空格,如何返回false#
我不能返回null,因为我的C# 如果字符串在c中有null或空格,如何返回false#,c#,asp.net,C#,Asp.net,我不能返回null,因为我的Hlist是不可为null的类型。我还可以返回什么来代替null HList findHListentry(string letter) { if (string.IsNullOrWhiteSpace(letter)) { HList result = listentry.Find(delegate(HList bk) { return
Hlist
是不可为null的类型。我还可以返回什么来代替null
HList findHListentry(string letter)
{
if (string.IsNullOrWhiteSpace(letter))
{
HList result = listentry.Find(delegate(HList bk)
{
return bk.letter == letter;
});
return result;
}
else
{
return ?;
}
}
是否改为使用可为空的
HList? findHListentry(string letter)
{
///
return null;
}
您有几个选择: 如果
HList
是一个结构:
HList?FindListentry(字符串字母)
您可能需要研究处理不可为null的值类型的几种方法:
- 使用
(缩写为Nullable
),或HList?
- 定义“空”的
条目,类似于Microsoft为HList
Guid
- 使您的方法返回
而不是bool
,并通过HList
参数返回out
,方法在HList
字典中执行。TryGetValue
struct HList {
public static HList Empty;
...
}
if (...) {
return HList.Empty;
}
返回bool
:
bool findHListentry(string letter, out HList res) {
...
}
如果方法的输入确实不应该是
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;
}
(请注意,我还颠倒了条件逻辑,因为它听起来像是在寻找问题标题的反面。)
您还可以查看以验证方法的前提条件,而不是手动检查输入并引发异常。如果不想返回null,可以创建HList的静态实例,用于指示它是“空”值 类似于EventArgs.Empty
public static readonly HList EmptyHList=new HList(){/*initialise*/}代码>一个实现是提供一个不可为null类型的空实例,并返回该实例以代替null。以字符串为例…虽然字符串在.NET中是一种可为空的类型,但它包含一个名为Empty的内置只读字段,因此使用字符串可以执行以下操作:
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
}
如果HList
是值类型,可以将其设置为可为空的值类型吗HList?
?有点相关:根据问题标题,我认为您的if条件逻辑混淆了。为了更简单的语法,您可以使用lamba而不是委托:return listEntry.Find(bk=>bk.letter==letter)代码>您可以控制HList的定义吗?如果没有,您可以使用自己的类定义包装它,并添加一个“isNull”属性。或者,如果有一个HList值,您知道它永远不会自然出现,那么将它的只读实例初始化为sentinel null值(有点像DbNull)。下面的答案很好,但真正重要的是调用它时会发生什么-返回值如何处理?