Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果空值变量为';那是一根绳子?_C#_String_Null - Fatal编程技术网

C# 如果空值变量为';那是一根绳子?

C# 如果空值变量为';那是一根绳子?,c#,string,null,C#,String,Null,如果变量中的值为空,是否可以测试变量是否定义为字符串 如果我写: string b = null; bool c = b is string; string b = null; bool c = (b.GetType() == typeof(string)); 然后c将为false,因为is查看的内容为null而不是字符串 如果我写: string b = null; bool c = b is string; string b = null; bool c = (b.GetType()

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

如果我写:

string b = null;
bool c = b is string;
string b = null;
bool c = (b.GetType() == typeof(string)); 
然后c将为false,因为is查看的内容为null而不是字符串

如果我写:

string b = null;
bool c = b is string;
string b = null;
bool c = (b.GetType() == typeof(string)); 
然后它崩溃了,因为s为null,并且不能对null值调用GetType()

那么,我如何检查b以确定它是什么类型的呢?也许是某种反思?还是有更简单的方法

编辑1:澄清问题

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

那么,我如何知道变量定义为什么类型呢?与本例一样,但是x是一个未知变量,可能被定义为字符串,也可能为null(因为它可能为null,所以本例不起作用)

编辑2:工作解决方案

多亏了给出的所有答案,我才得以解决它。这就是工作解决方案的演变过程。我首先创建了一个帮助函数来测试定义的变量类型,该变量即使值为null且不指向任何东西也能工作

public static Type GetParameterType<T>(T destination)
{
    return typeof(T);
}
这正是我想知道的!!!谢谢大家绞尽脑汁…

给你们

String.IsNullOrEmpty(s);

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

(其他人似乎都在回答这样一个问题:“我如何判断字符串引用是null还是空的?但我认为问题是“我如何判断null引用的基本类型是
string
…)

不过,可能有一种方法可以处理它-您可以使用此处提到的通用方法:


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

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

简单地说,答案是否定的

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

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

String.IsNullOrWhiteSpace(stringObject);

要将值设置为未知类型,最好使用

Convert.ChangeType 
e、 g.如中所述

public void GetObjectValue(out T destination)
{
对象paramVal=“诸如此类。”;
目的地=默认值(T);
destination=Convert.ChangeType(paramVal,typeof(T).GetType());
}
T的类型是可以推断的,因此不需要显式地为方法提供类型参数

  • IsNullOrWhiteSpace(variableName)

  • string.IsNullOrEmpty()

  • var.Trim().Length<1


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

    使用
    字符串.IsNullOrEmpty
    方法检查它

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

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

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

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

    如果变量的类型为
    string
    ,那么您在编译时就知道它了(毕竟您将它声明为
    string

    如果变量是泛型的(如泛型类型或泛型方法),则可以通过
    typeof(T)
    对其进行测试,假设
    T
    是您的类型参数。

    如果将变量设置为
    对象
    (例如,作为方法的参数),那么如果其值为
    null
    ,则无法确定其原始类型

    s
    为空时,这如何回答“s是字符串吗?”的问题?如果s不是字符串,这将引发异常。Parse:这会让您想知道为什么他们要测试该变量以确定它是否是字符串。@Sean否,如果编译时间不是字符串,它将无法编译。如果它编译,when run将不会抛出异常。可能重复的,,我怀疑您是否可以这样做,因为z null对于特定类型来说不是符号性的。您可能正在尝试解决一个问题,而该问题最好用另一种方式解决。你能详细说明你想做什么吗?这个问题主要是出于好奇。我不喜欢当我不知道如何做某件事,然后我只想找出答案。如果无法修复,那没关系,我只是想知道。我希望我对这个问题的编辑能让我的想法更加清晰。是什么让你知道对象的类型你不知道它是什么类型的?我不是反对者,但原因可能是你没有回答这个问题:我如何检查b来找出它是什么类型的?这里的许多答案似乎都集中在文章的标题上(这是误导)。@tim好的,让主持人相应地编辑问题。然后我会删除我的答案是的,你是唯一一个知道我的问题的人:-)但是即使变量可能有空值,也没有办法检查变量是如何定义的吗?@Ohlin-你看过你问题下第一条评论中的任何重复链接吗?@Ohlin我已经在我的答案中复制了其他人在你原始问题下作为评论发布的链接。它似乎给出了一个可能的答案:“如何检查变量的编译时类型?”只要看看代码就知道了。在声明变量的位置可以看到该类型。IDE将有助于解决问题
    public void GetObjectValue<T>(out T destination)
    {
        object paramVal = "Blah.Blah.";
        destination = default(T);
        destination = Convert.ChangeType(paramVal, typeof(T).GetType());
    }
    
    string b = null;
    bool c = String.IsNullOrEmpty(b);