6

如果变量内部的值为空,是否可以测试变量是否定义为字符串?

如果我写:

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

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

如果我写:

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

然后它崩溃了,因为 s 是 null 并且你不能在 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

这正是我想知道的!!!谢谢大家绞尽脑汁...

4

6 回答 6

11

您无法检查的类型,null因为null 没有类型。它根本不引用任何内容,因此 C# 无法查看任何内容来找出实际类型。

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

可能有一种方法可以解决它 - 您可以使用这里提到的通用方法:

.NET:如何获得空对象的类型?

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

于 2013-06-18T06:11:10.293 回答
3

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

在简单的词中,答案是否定的。

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

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

String.IsNullOrWhiteSpace(stringObject);

String.IsNullOrEmpty(stringObject)

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

Convert.ChangeType 

例如.NET 中给出的:如何获得空对象的类型?

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

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

于 2013-06-18T06:11:23.043 回答
1

这里是

String.IsNullOrEmpty(s);
于 2013-06-18T06:10:56.183 回答
1

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

因此,您似乎想确定变量的实际类型(它被声明为):

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

于 2013-06-18T06:28:34.323 回答
0
  1. IsNullOrWhiteSpace(variableName)

  2. string.IsNullOrEmpty()

  3. var.Trim().Length < 1

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

于 2013-06-18T06:12:25.943 回答
0

使用String.IsNullOrEmpty方法来检查它。

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

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

于 2013-06-18T06:12:34.643 回答