@@ -97,7 +97,7 @@ CSSyntax.ArgumentSyntax ConvertOmittedArgument(IParameterSymbol parameter)
9797 var csRefKind = CommonConversions . GetCsRefKind ( parameter ) ;
9898 return csRefKind != RefKind . None
9999 ? CreateOptionalRefArg ( parameter , csRefKind )
100- : CS . SyntaxFactory . Argument ( CommonConversions . Literal ( parameter . ExplicitDefaultValue ) ) ;
100+ : CS . SyntaxFactory . Argument ( LiteralOrDefault ( parameter . ExplicitDefaultValue , parameter . Type ) ) ;
101101 }
102102 }
103103
@@ -144,6 +144,14 @@ internal CSSyntax.ExpressionSyntax HoistByRefDeclaration(VBSyntax.ExpressionSynt
144144 return local . IdentifierName ;
145145 }
146146
147+ private static CSSyntax . ExpressionSyntax LiteralOrDefault ( object value , ITypeSymbol paramType )
148+ {
149+ if ( value is null && paramType . IsValueType ) {
150+ return ValidSyntaxFactory . DefaultExpression ;
151+ }
152+ return CommonConversions . Literal ( value ) ;
153+ }
154+
147155 private ISymbol GetInvocationSymbol ( SyntaxNode invocation )
148156 {
149157 var symbol = invocation . TypeSwitch (
@@ -226,7 +234,7 @@ private CSSyntax.ArgumentSyntax CreateOptionalRefArg(IParameterSymbol p, RefKind
226234 var type = CommonConversions . GetTypeSyntax ( p . Type ) ;
227235 CSSyntax . ExpressionSyntax initializer ;
228236 if ( p . HasExplicitDefaultValue ) {
229- initializer = CommonConversions . Literal ( p . ExplicitDefaultValue ) ;
237+ initializer = LiteralOrDefault ( p . ExplicitDefaultValue , p . Type ) ;
230238 } else if ( HasOptionalAttribute ( p ) ) {
231239 if ( TryGetDefaultParameterValueAttributeValue ( p , out var defaultValue ) ) {
232240 initializer = CommonConversions . Literal ( defaultValue ) ;
0 commit comments