如果它是一个字符串,如何测试一个空值变量?

时间:2013-06-18 06:08:31

标签: c# string null

如果变量被定义为字符串,如果其中的值为null,是否可以测试?

如果我写:

string b = null;
bool c = b is string;

然后 c 将为false,因为 会查看内容,该内容为空,而不是字符串。

如果我写:

string b = null;
bool c = (b.GetType() == typeof(string)); 

然后它崩溃,因为s为null,你不能在空值上调用GetType()。

那么,我如何检查b以找出它是什么类型?某种反思可能吗?或者有更简单的方法吗?

编辑1:澄清问题!

我的问题有点不清楚,这是我的错。在示例中,它看起来像我正在尝试测试变量的内容。但我想在不查看内容的情况下测试变量本身。在给出的代码示例中,我可以看到b是一个字符串,但是如果我不知道b是否是字符串并且只想测试变量s以查看它是否是字符串。

那么,我怎么知道变量的定义类型是什么?如本例所示,但x是一个未知变量,可能被定义为一个字符串,它也可能为null(因为它可能为null,这个例子不起作用)。

bool c = (x.GetType() == typeof(string)); 

编辑2:工作解决方案!

感谢所有答案,我能够解决它。这就是工作解决方案的成果。我首先创建了一个帮助函数来测试一个变量的定义类型,即使该值为null并且它没有指向任何东西也是有效的。

public static Type GetParameterType<T>(T destination)
{
    return typeof(T);
}

然后我可以调用此函数并测试我的“疑似字符串”并查明它是否真的是一个字符串。

// We define s as string just for this examples sake but in my "definition" we wouldn't be sure about whether s is a string or not.
string s = null; 

// Now we want to test to see if s is a string
Type t = GetParameterType(s);
b = t == typeof(string);  // Returns TRUE because s has the type of a string
b = t is string;  // Returns FALSE because the content isn't a string

这正是我想要找到的!谢谢大家挤压你的大脑......

6 个答案:

答案 0 :(得分:11)

您无法检查null的类型,因为null 没有类型。它根本没有引用任何东西,因此C#没有任何东西可以查找实际类型。

(其他人似乎都在回答这个问题“如何判断字符串引用是空还是空 - 但我认为问题是”如何判断基础类型是否为< null引用是string ...)

虽然可能有办法摆弄它 - 你可以使用这里提到的通用方法:

.NET : How do you get the Type of a null object?

(该链接是由其他人发布的 - 不是我 - 作为对您原始帖子的评论!)

答案 1 :(得分:3)

所以你想知道是否有一种直接方法来检查其值设置为NULL的对象类型

简单来说,答案是否定的。

空引用不指向任何存储位置,因此没有元数据可以从中进行确定。

虽然如果你已经知道它是String类型,你可以使用以下两个函数来检查空值

String.IsNullOrWhiteSpace(stringObject);

String.IsNullOrEmpty(stringObject)

将值设置为未知类型的最佳方法是使用

Convert.ChangeType 

e.g。如.NET : How do you get the Type of a null object?

中所述
public void GetObjectValue<T>(out T destination)
{
    object paramVal = "Blah.Blah.";
    destination = default(T);
    destination = Convert.ChangeType(paramVal, typeof(T).GetType());
}

可以推断出T的类型,因此您不需要明确地为方法提供类型参数。

答案 2 :(得分:1)

这是

String.IsNullOrEmpty(s);

答案 3 :(得分:1)

如果您想知道实际值是否为string,则无法使用null执行此操作,因为null没有类型。

所以看起来你想确定变量的实际类型(声明为变量的那个):

如果变量的类型为string,那么您在编译时就知道了(毕竟你将其声明为string。) 如果变量是通用的(如通用类型或通用方法),则可以通过typeof(T)对其进行测试,假设T是您的类型参数。
如果您将变量设置为object(例如,作为方法的参数),则如果其值为null,则无法确定其原始类型。

答案 4 :(得分:0)

  1. IsNullOrWhiteSpace(variableName)

  2. string.IsNullOrEmpty()

  3. var.Trim().Length < 1

  4. 第三个是我个人使用的,因为它与版本无关。

答案 5 :(得分:0)

使用String.IsNullOrEmpty方法进行检查。

string b = null;
bool c = String.IsNullOrEmpty(b);

有关详细信息,请参阅此MSDN链接。