简体   繁体   中英

How do I check if a value is assigned to an int in c#?

int x might not have an assignment. How do I detect that? What value does int hold when it is unassigned?

This gives me a warning in Visual Studio:

public SomeMethod(int x) {
    if (x == null) {
    /* VS throws a warning:
    'The result of the expression is always 'false' since a value of type 'int' 
     is never equal to 'null' of type 'int' */
    };
}

This also gives me a warning in Visual Studio:

public SomeMethod(int? x) { 
    // declaring int 'Nullable' does not fix the warning.
    if (x == null) {
    // Same warning.
    };
}

Likewise:

public SomeMethod(int? x) {
    if (!x.HasValue) { 
    //  This does not work either.
    };
}

int x might not have an assignment.

That's simply not true. In your case, x is a parameter - it's "definitely assigned" from the start of the method, in specification terminology. When someone calls the method, they have to provide a value. There's no concept of the value not being assigned.

If you want to represent a parameter which may not have a meaningful int value, you should use Nullable<int> , aka int? :

public void DoSomething(int? x)
{
    if (x == null)
    {
        ...
    }
    else
    {
        // Or whatever
        Console.WriteLine(x.Value);
    }
}

As of C# 4, you could then give the parameter a default value of null if you want to be able to call it as just foo.DoSomething() without providing a value. You couldn't distinguish between that and foo.DoSomething(null) though.

In your case the best solution probably would be to use a default value for the parameter like this, so that when the parameter is null, the code does not throw an error and also the compiler will not show any warning -

    public void test(int? x){
        if (x == null)
        {
            Console.Write("test");
        }
    }

    public void testA(int? x = null)
    {
        if (x == null)
        {
            Console.Write("test");
        }
    }

    static void Main(string[] args)
    {
        var p = new Program();
        p.test(null);
        p.testA();
    }

But the code -

public SomeMethod(int x) {
    if (x == null) {
    /* Never happens because 'The result of the expression is always 'false' since a value of type 'int' is never equal to 'null' of type 'int' */
    };
}

will always show warning because the default value for int is 0 , not null as mentioned here -

C# Primitive Types

And thus the the value for x == null is always false.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM