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

本文关键字:字符串 一个 如果 变量 何测试 测试 空值 | 更新日期: 2023-09-27 18:19:00

是否可以测试一个变量是否被定义为字符串,如果它里面的值是空的?

如果我写:

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

那么c将为false,因为is查看内容,该内容为空且不是字符串。

如果我写:

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

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

那么,我如何检查b来找出它的类型呢?也许是某种反射?或者有更简单的方法吗?

编辑1:澄清问题!

我的问题有点不清楚,那是我的错。在这个例子中,看起来我正在尝试测试变量的内容。但我想测试变量本身,而不查看内容。在给出的代码示例中,我可以看到b是一个字符串,但是如果我不知道b是否是一个字符串,只是想测试变量s,看看它是否是一个字符串。那么,我怎么知道变量被定义为什么类型呢?在这个例子中,但是x是一个未知变量,它可能被定义为一个字符串,它也可能是空的(因为它可能是空的,这个例子将不起作用)。
bool c = (x.GetType() == typeof(string)); 

编辑2:工作解决方案!

多亏了所有的答案,我才能解决它。这就是可行的解决方案。我首先创建了一个帮助函数来测试变量的定义类型,即使值是空的,也不指向任何东西。

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

这正是我想知道的!!

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

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

(其他人似乎都在回答这个问题"我怎么能告诉如果一个字符串引用是空的或空的-但我认为这个问题是"我怎么能告诉如果一个空引用的底层类型string…)

可能有一种方法可以篡改它-您可以使用这里提到的泛型方法:

。你如何得到一个空对象的类型?

(那个链接是别人发的,不是我,是对你原来帖子的评论!)

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

在简单的单词中,答案是NO。

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

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

String.IsNullOrWhiteSpace(stringObject);

String.IsNullOrEmpty(stringObject)

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

Convert.ChangeType 

。如何获得一个空对象的类型?

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

可以推断T的类型,因此不需要显式地为方法提供类型参数。

在这里

String.IsNullOrEmpty(s);

如果要判断实际值是否为string,则不能使用null,因为null没有类型。

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

如果变量的类型是string,那么您在编译时就知道它了(毕竟您将它声明为string)。如果变量是泛型的(如泛型类型或泛型方法),您可以通过typeof(T)测试它,假设T是您的类型参数。
如果你得到的变量是object(例如,作为一个方法的参数),那么如果它的值是null,就没有办法确定它的原始类型。

使用String.IsNullOrEmpty方法检查

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

  2. string.IsNullOrEmpty()

  3. var.Trim().Length < 1

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