如果变量被定义为字符串,如果其中的值为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
这正是我想要找到的!谢谢大家挤压你的大脑......
答案 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)
IsNullOrWhiteSpace(variableName)
string.IsNullOrEmpty()
var.Trim().Length < 1
第三个是我个人使用的,因为它与版本无关。
答案 5 :(得分:0)