如何测试空值变量,如果它是一个字符串
本文关键字:字符串 一个 如果 变量 何测试 测试 空值 | 更新日期: 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);
-
IsNullOrWhiteSpace(variableName)
-
string.IsNullOrEmpty()
-
var.Trim().Length < 1
第三个是我个人使用的,因为它是与版本无关的。