Skip to content

Commit 7dbb3fe

Browse files
committed
Added more nullability.
1 parent 004c285 commit 7dbb3fe

File tree

167 files changed

+1113
-1119
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

167 files changed

+1113
-1119
lines changed

docs/change-log/index.html

+318-313
Large diffs are not rendered by default.

docs/sitemap.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>/CsvHelper/CsvHelper/google6ad86f23ff698b61</loc></url><url><loc>/CsvHelper/CsvHelper/api</loc></url><url><loc>/CsvHelper/CsvHelper/change-log</loc></url><url><loc>/CsvHelper/CsvHelper/examples</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/attributes</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/optional-maps</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/auto-mapping</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/inline-type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/constant-value</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-name</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/ignoring-properties</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/using-and-dispose</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-index</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/appending-to-an-existing-file</loc></url><url><loc>/CsvHelper/CsvHelper/examples/csvdatareader</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-properties</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/streams</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/validation</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/enumerate-class-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-class-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/reading-and-writing-files</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-dynamic-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-by-hand</loc></url><url><loc>/CsvHelper/CsvHelper/getting-started</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-multiple-data-sets</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-anonymous-type-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-multiple-record-types</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-dynamic-objects</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v15</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-anonymous-type-objects</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion/custom-type-converter</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v13</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v23</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-class-objects</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion/type-converter-options</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v14</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v24</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v30</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v4</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v18</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v19</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v27</loc></url><url><loc>/CsvHelper/CsvHelper/migration</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v28</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v10</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v16</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v11</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v7</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v21</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v17</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v12</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v8</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v22</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v25</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v2</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v29</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v26</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v20</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v3</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v9</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v5</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v6</loc></url><url><loc>/CsvHelper/CsvHelper</loc></url></urlset>
1+
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>/CsvHelper/CsvHelper/google6ad86f23ff698b61</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/auto-mapping</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/constant-value</loc></url><url><loc>/CsvHelper/CsvHelper/api</loc></url><url><loc>/CsvHelper/CsvHelper/change-log</loc></url><url><loc>/CsvHelper/CsvHelper/examples</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/attributes</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-index</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/ignoring-properties</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/inline-type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-name</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/optional-maps</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-properties</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/reading-and-writing-files</loc></url><url><loc>/CsvHelper/CsvHelper/examples/csvdatareader</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/validation</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/enumerate-class-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-class-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/using-and-dispose</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/streams</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-dynamic-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-by-hand</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion/custom-type-converter</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-multiple-data-sets</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-anonymous-type-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-anonymous-type-objects</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion/type-converter-options</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-multiple-record-types</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-dynamic-objects</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v18</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-class-objects</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/appending-to-an-existing-file</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v28</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v7</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v8</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v10</loc></url><url><loc>/CsvHelper/CsvHelper/migration</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v11</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v12</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v16</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v22</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v19</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v13</loc></url><url><loc>/CsvHelper/CsvHelper/getting-started</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v17</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v23</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v2</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v20</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v14</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v26</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v5</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v30</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v21</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v15</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v27</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v6</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v4</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v29</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v24</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v9</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v3</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v25</loc></url><url><loc>/CsvHelper/CsvHelper</loc></url></urlset>

src/CsvHelper.Website/input/change-log/index.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Log
22

3+
### 33.0.1
4+
5+
#### Bug Fixes
6+
7+
- Added more things that can be null.
8+
39
### 33.0.0
410

511
#### Features

src/CsvHelper/Configuration/ClassMapBuilder.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public interface IHasMap<TClass> : IBuildableClass<TClass>
2121
/// <param name="useExistingMap">If true, an existing map will be used if available.
2222
/// If false, a new map is created for the same member.</param>
2323
/// <returns>The member mapping.</returns>
24-
IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true);
24+
IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember?>> expression, bool useExistingMap = true);
2525
}
2626

2727
/// <summary>
@@ -303,7 +303,7 @@ public ClassMapBuilder()
303303
map = new BuilderClassMap<TClass>();
304304
}
305305

306-
public IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true)
306+
public IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember?>> expression, bool useExistingMap = true)
307307
{
308308
return new MemberMapBuilder<TClass, TMember>(map, map.Map(expression, useExistingMap));
309309
}
@@ -345,7 +345,7 @@ public MemberMapBuilder(ClassMap<TClass> classMap, MemberMap<TClass, TMember> me
345345
}
346346

347347
#pragma warning disable CS0693 // Type parameter has the same name as the type parameter from outer type
348-
public IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true)
348+
public IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember?>> expression, bool useExistingMap = true)
349349
{
350350
return new MemberMapBuilder<TClass, TMember>(classMap, classMap.Map(expression, useExistingMap));
351351
}

src/CsvHelper/Configuration/ClassMap`1.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public ClassMap() : base(typeof(TClass)) { }
2525
/// <param name="useExistingMap">If true, an existing map will be used if available.
2626
/// If false, a new map is created for the same member.</param>
2727
/// <returns>The member mapping.</returns>
28-
public virtual MemberMap<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true)
28+
public virtual MemberMap<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember?>> expression, bool useExistingMap = true)
2929
{
3030
var (classMap, member) = GetMemberMap(expression);
3131
var memberMap = classMap.Map(typeof(TClass), member, useExistingMap); ;
@@ -40,7 +40,7 @@ public virtual MemberMap<TClass, TMember> Map<TMember>(Expression<Func<TClass, T
4040
/// <param name="useExistingMap">If true, an existing map will be used if available.
4141
/// If false, a new map is created for the same member.</param>
4242
/// <returns>The member mapping.</returns>
43-
public virtual MemberMap Map<T>(Expression<Func<T, object>> expression, bool useExistingMap = true)
43+
public virtual MemberMap Map<T>(Expression<Func<T, object?>> expression, bool useExistingMap = true)
4444
{
4545
var (classMap, member) = GetMemberMap(expression);
4646
var memberMap = classMap.Map(typeof(TClass), member, useExistingMap);
@@ -58,13 +58,13 @@ public virtual MemberMap Map<T>(Expression<Func<T, object>> expression, bool use
5858
/// <param name="expression">The expression.</param>
5959
/// <param name="constructorArgs">Constructor arguments used to create the reference map.</param>
6060
/// <returns>The reference mapping for the member.</returns>
61-
public virtual MemberReferenceMap References<TClassMap>(Expression<Func<TClass, object>> expression, params object[] constructorArgs) where TClassMap : ClassMap
61+
public virtual MemberReferenceMap References<TClassMap>(Expression<Func<TClass, object?>> expression, params object[] constructorArgs) where TClassMap : ClassMap
6262
{
6363
var member = ReflectionHelper.GetMember(expression);
6464
return References(typeof(TClassMap), member, constructorArgs);
6565
}
6666

67-
private (ClassMap, MemberInfo) GetMemberMap<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression)
67+
private (ClassMap, MemberInfo) GetMemberMap<TModel, TProperty>(Expression<Func<TModel, TProperty?>> expression)
6868
{
6969
var stack = ReflectionHelper.GetMembers(expression);
7070
if (stack.Count == 0)

src/CsvHelper/Configuration/CsvConfiguration.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public record CsvConfiguration : IReaderConfiguration, IWriterConfiguration
2121
public virtual bool AllowComments { get; set; }
2222

2323
/// <inheritdoc/>
24-
public virtual BadDataFound BadDataFound { get; set; } = ConfigurationFunctions.BadDataFound;
24+
public virtual BadDataFound? BadDataFound { get; set; } = ConfigurationFunctions.BadDataFound;
2525

2626
/// <inheritdoc/>
2727
public virtual int BufferSize { get; set; } = 0x1000;
@@ -75,7 +75,7 @@ public record CsvConfiguration : IReaderConfiguration, IWriterConfiguration
7575
public virtual bool HasHeaderRecord { get; set; } = true;
7676

7777
/// <inheritdoc/>
78-
public virtual HeaderValidated HeaderValidated { get; set; } = ConfigurationFunctions.HeaderValidated;
78+
public virtual HeaderValidated? HeaderValidated { get; set; } = ConfigurationFunctions.HeaderValidated;
7979

8080
/// <inheritdoc/>
8181
public virtual bool IgnoreBlankLines { get; set; } = true;
@@ -108,7 +108,7 @@ public record CsvConfiguration : IReaderConfiguration, IWriterConfiguration
108108
public virtual MemberTypes MemberTypes { get; set; } = MemberTypes.Properties;
109109

110110
/// <inheritdoc/>
111-
public virtual MissingFieldFound MissingFieldFound { get; set; } = ConfigurationFunctions.MissingFieldFound;
111+
public virtual MissingFieldFound? MissingFieldFound { get; set; } = ConfigurationFunctions.MissingFieldFound;
112112

113113
/// <inheritdoc/>
114114
public virtual CsvMode Mode { get; set; }
@@ -134,7 +134,7 @@ public virtual string NewLine
134134
public virtual char Quote { get; set; } = '"';
135135

136136
/// <inheritdoc/>
137-
public virtual ReadingExceptionOccurred ReadingExceptionOccurred { get; set; } = ConfigurationFunctions.ReadingExceptionOccurred;
137+
public virtual ReadingExceptionOccurred? ReadingExceptionOccurred { get; set; } = ConfigurationFunctions.ReadingExceptionOccurred;
138138

139139
/// <inheritdoc/>
140140
public virtual ReferenceHeaderPrefix? ReferenceHeaderPrefix { get; set; }

src/CsvHelper/Configuration/IParserConfiguration.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public interface IParserConfiguration
7878
/// You can supply your own function to do other things like logging the issue
7979
/// instead of throwing an exception.
8080
/// </summary>
81-
BadDataFound BadDataFound { get; }
81+
BadDataFound? BadDataFound { get; }
8282

8383
/// <summary>
8484
/// Gets or sets the maximum size of a field.

src/CsvHelper/Configuration/IReaderConfiguration.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@ public interface IReaderConfiguration : IParserConfiguration
2121
/// will throw a <see cref="ValidationException"/> if there is no header for a given member mapping.
2222
/// You can supply your own function to do other things like logging the issue instead of throwing an exception.
2323
/// </summary>
24-
HeaderValidated HeaderValidated { get; }
24+
HeaderValidated? HeaderValidated { get; }
2525

2626
/// <summary>
2727
/// Gets the function that is called when a missing field is found. The default function will
2828
/// throw a <see cref="MissingFieldException"/>. You can supply your own function to do other things
2929
/// like logging the issue instead of throwing an exception.
3030
/// </summary>
31-
MissingFieldFound MissingFieldFound { get; }
31+
MissingFieldFound? MissingFieldFound { get; }
3232

3333
/// <summary>
3434
/// Gets the function that is called when a reading exception occurs.
3535
/// The default function will re-throw the given exception. If you want to ignore
3636
/// reading exceptions, you can supply your own function to do other things like
3737
/// logging the issue.
3838
/// </summary>
39-
ReadingExceptionOccurred ReadingExceptionOccurred { get; }
39+
ReadingExceptionOccurred? ReadingExceptionOccurred { get; }
4040

4141
/// <summary>
4242
/// Prepares the header field for matching against a member name.

src/CsvHelper/Configuration/MemberMap.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public virtual MemberMap Default(object defaultValue, bool useOnConversionFailur
158158
/// what other mapping configurations are specified.
159159
/// </summary>
160160
/// <param name="constantValue">The constant value.</param>
161-
public virtual MemberMap Constant(object constantValue)
161+
public virtual MemberMap Constant(object? constantValue)
162162
{
163163
if (Data.Member == null)
164164
{

src/CsvHelper/Configuration/MemberMapCollection.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ public virtual MemberMap this[int index]
200200
/// <typeparam name="T">The <see cref="System.Type"/> the member is on.</typeparam>
201201
/// <param name="expression">The member expression.</param>
202202
/// <returns>The <see cref="MemberMap"/> for the given expression, or null if not found.</returns>
203-
public virtual MemberMap? Find<T>(Expression<Func<T, object>> expression)
203+
public virtual MemberMap? Find<T>(Expression<Func<T, object?>> expression)
204204
{
205205
var member = ReflectionHelper.GetMember(expression);
206206
return Find(member);

src/CsvHelper/Configuration/MemberMap`1.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public virtual MemberMap<TClass, TMember> Default(TMember defaultValue, bool use
136136
/// </summary>
137137
/// <param name="defaultValue">The default value.</param>
138138
/// <param name="useOnConversionFailure">Use default on conversion failure.</param>
139-
public virtual MemberMap<TClass, TMember> Default(string defaultValue, bool useOnConversionFailure = false)
139+
public virtual MemberMap<TClass, TMember> Default(string? defaultValue, bool useOnConversionFailure = false)
140140
{
141141
Data.Default = defaultValue;
142142
Data.IsDefaultSet = true;
@@ -151,7 +151,7 @@ public virtual MemberMap<TClass, TMember> Default(string defaultValue, bool useO
151151
/// what other mapping configurations are specified.
152152
/// </summary>
153153
/// <param name="constantValue">The constant value.</param>
154-
public virtual MemberMap<TClass, TMember> Constant(TMember constantValue)
154+
public virtual MemberMap<TClass, TMember> Constant(TMember? constantValue)
155155
{
156156
Data.Constant = constantValue;
157157
Data.IsConstantSet = true;

src/CsvHelper/CsvDataReader.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public int GetOrdinal(string name)
255255
var headerRecord = csv.HeaderRecord;
256256
for (var i = 0; i < (headerRecord?.Length ?? 0); i++)
257257
{
258-
args = new PrepareHeaderForMatchArgs(headerRecord?[i], i);
258+
args = new PrepareHeaderForMatchArgs(headerRecord?[i] ?? string.Empty, i);
259259
var headerPrepared = csv.Configuration.PrepareHeaderForMatch(args);
260260
if (csv.Configuration.CultureInfo.CompareInfo.Compare(namePrepared, headerPrepared, CompareOptions.IgnoreCase) == 0)
261261
{

0 commit comments

Comments
 (0)