• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 855
  • Last Modified:

C# Single line if Statement return Null

I have C# enum. If selected value is Customer(ie value 0) i want to return NULL in a Single line If Statement.
I am getting syntax Errors
 
public enum tables
  {
   customer
   Orders
   OrderDetail
}


public int GetTable(tables tableEnum)
     {
       int iTable = (int)tableEnum;  -- iTable returns 0,1 or 2 as per ENUM
     
            iTable= (iTable == 0) ? int? iTable= null  : iTable;    ---- Synatx Errors
0
dotnet0824
Asked:
dotnet0824
  • 7
  • 7
  • 2
  • +2
2 Solutions
 
Oliver AmayaEntrepeneurCommented:
Hi, should be:
iTable = (iTable == 0)?null:iTable;

Open in new window

0
 
dotnet0824Author Commented:
Hi,
I tried that I get Error "There is no implicit conversion between Null and Int"... Looks like we have to convert Int To Null as iTable is int    at ?Null
0
 
Jaime OlivaresSoftware ArchitectCommented:
why to convert to int previously to evaluation? enum advantage is precisely the legibility for evaluation.
Also, an integer cannot be null, so you have to use the Nullable type.
Something like:


public int? GetTable(tables tableEnum)
{
    return (tableEnum==tables.Customer) ? null : (int)tableEnum;
}

Open in new window

0
Cloud Class® Course: Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

 
Jaime OlivaresSoftware ArchitectCommented:
This will need to receive the result of GetTable in a similar variable, like:
int? result = GetTable(........);
if (result.HasValue)
{
    // do something with result.Value
}

But this is not  agood approach, maybe you can solve it by returning -1 instead of null, so you don't have to use the nullable type.
0
 
dotnet0824Author Commented:
Hi Jaime,
Sorry the function return DataType is Dataset . I am v sorry here it is

public DataSet GetTable(tables tableEnum)
     {
       int iTable = (int)tableEnum;  -- iTable returns 0,1 or 2 as per ENUM
     
            iTable= (iTable == 0) ? int? iTable= null  : iTable;    ---- Synatx Errors
0
 
Jaime OlivaresSoftware ArchitectCommented:
well, I am more confused now, maybe you need:

public DataSet GetTable(tables tableEnum)
{
    return (tableEnum==tables.Customer) ? null : someCollection[(int)tableEnum];
}

But better send the rest of the code to understand you. I am suspecting you need DataTable as a return value, not DataSet
0
 
SteveH_UKCommented:
The only way you can return NULL is by having a type that supports NULL, which an Enum does not directly.

However, from .NET 2.0, you have access to generics and this lets you have a type that can be Null.  It is called Nullable and is in the System namespace.

Note that you haven't told us anything about where you are getting your DataSet from, and I suspect that this is not what you are actually trying to achieve.
public Nullable(Of DataSet)(tables tableEnum)
{
  return (tableEnum==tables.Customer) ? null : myDataSet;
}

Open in new window

0
 
dotnet0824Author Commented:
its pretty simple James... inCase 0 is passed in Enum I want to pass @iTable value as NULL or else 1 or 2 as per ENUM Thats all i need now ... Only thing i need is if TableENUM value is 0 (ie Customer Passed in) I Want the variable iTable to take Null
public DataSet GetCustomers(tables tableEnum)
     {
       int iTable = (int)tableEnum;  -- iTable returns 0,1 or 2 as per ENUM
           db.AddInParameter(Command, "@Enabled", DbType.Int32, @iTable);
0
 
Göran AnderssonCommented:
Here is how you create a value that you can use in a data parameter:

object value = tableEnum==tables.Customer ? DbNull.Value : (int)tableEnum;
0
 
Jaime OlivaresSoftware ArchitectCommented:
@steve,
The nullable type is unnecessary in your example since DataSet is a reference type and can be null.
0
 
dotnet0824Author Commented:
James.. I am trying out what u had given

   tableEnum==tables.Customer ? null : (int)tableEnum;  ===Syntax Error

    I want to pass that NULL value to the following parameter
 db.AddInParameter(Command, "@Enabled", DbType.Int32, PassValueAsVariableFromENUM);
 
0
 
SteveH_UKCommented:
jaime, this is true, my mistake.  I was still thinking in terms of the Enum...
0
 
Jaime OlivaresSoftware ArchitectCommented:
As I stated you don't have to convert to int to evaluate, just evaluate at enum level.
With the last code snippet you have posted, the GreenGhost suggestion appear to be well. So, maybe this is what you need:

       object value = tableEnum==tables.Customer ? DbNull.Value : (int)tableEnum;

           db.AddInParameter(Command, "@Enabled", DbType.Int32, value);
0
 
dotnet0824Author Commented:
i tried out this
object value = tableEnum==tables.Customer ? DbNull.Value : (int)tableEnum;
--Error There is no implicit conversion between DbNull and Int
0
 
Jaime OlivaresSoftware ArchitectCommented:
better you do:
object value;
if (tableEnum==tables.Customer)
       value = DbNull.Value;
else
       value = (int)tableEnum;
0
 
dotnet0824Author Commented:
cant it be done in a Single Line If Statement..........Can u please check this   Should we use ?int which is nullable int..  
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_22157027.html?sfQueryTermInfo=1+convert+int+null
0
 
Jaime OlivaresSoftware ArchitectCommented:
it can be as my first suggestion:

int? value = (tableEnum==tables.Customer) ? null : (int?)tableEnum;
0
 
Göran AnderssonCommented:
You just have to cast the values to object:

object value = tableEnum==tables.Customer ? (object)DbNull.Value : (object)(int)tableEnum;
0
 
dotnet0824Author Commented:
Thanks Jaime. I tried out ur last Posting and it worked Great.
Thanks GreenGhost. Converting to object worked too. I have increased points by 100 and assigning
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

  • 7
  • 7
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now