[ 
https://issues.apache.org/jira/browse/THRIFT-5040?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Konstantin updated THRIFT-5040:
-------------------------------
    Description: 
Optional fields for value types are not Nullable in C# (netstd)

 for example 
{code:java}
struct Test {    
1:  required i64 id,
2:  optional bool some_flag
}
{code}
will generate class 
{code:java}
public partial class Test : TBase{  
  private bool _some_flag;
  public long Id { get; set; }
  public bool Some_flag  {    get    {      return _some_flag;    }    set    { 
     __isset.some_flag = true;      this._some_flag = value;    }  }
{code}
that makes the some_flag to be false even if it was not set on the sending 
party.

 

The optional value types should be generated as Nullable<T>:
{code:java}
private bool? _some_flag;
{code}
 

This is especially harmful with other value types like int, enums, etc...

  was:
Optional fields for value types are not Nullable in C# (netstd)

 for example 
{code:java}
struct Test {    
1:  required i64 id,
2:  optional bool some_flag
}
{code}
will generate class 
{code:java}
public partial class Test : TBase{  
  private bool _some_flag;
  public long Id { get; set; }
  public bool Some_flag  {    get    {      return _some_flag;    }    set    { 
     __isset.some_flag = true;      this._some_flag = value;    }  }
{code}
that makes the some_flag to be false even if it was not set on the sending 
party.

 

The optional value types should be generated as Nullable<T>:
{code:java}
private bool? _some_flag;
{code}
 

This is especially harmful with other value types


> Optional fields for value types are not Nullable in C# (netstd)
> ---------------------------------------------------------------
>
>                 Key: THRIFT-5040
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5040
>             Project: Thrift
>          Issue Type: Bug
>          Components: netstd - Compiler
>    Affects Versions: 0.13.0
>            Reporter: Konstantin
>            Priority: Major
>
> Optional fields for value types are not Nullable in C# (netstd)
>  for example 
> {code:java}
> struct Test {    
> 1:  required i64 id,
> 2:  optional bool some_flag
> }
> {code}
> will generate class 
> {code:java}
> public partial class Test : TBase{  
>   private bool _some_flag;
>   public long Id { get; set; }
>   public bool Some_flag  {    get    {      return _some_flag;    }    set    
> {      __isset.some_flag = true;      this._some_flag = value;    }  }
> {code}
> that makes the some_flag to be false even if it was not set on the sending 
> party.
>  
> The optional value types should be generated as Nullable<T>:
> {code:java}
> private bool? _some_flag;
> {code}
>  
> This is especially harmful with other value types like int, enums, etc...



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to