Обнуляемые типы предназначены для той же цели. Они представляют типы значений с возможностью отсутствия данных в них. Наличие значения можно проверить с помощью свойства HasValue этих типов.
Псевдокод для чтения полей:
decimal? dValue; // default value is null
if(decimalValueExists)
{
dValue = <value read from text file>
}
Когда вы говорите несколько методов - я предполагаю, что это перегруженные методы, чтобы иметь возможность добавлять необязательные поля (поэтому n необязательных полей означает n дополнительных методов)
Вы можете избежать написания этих методов, написав один метод. Предположим, у вас есть одно обязательное поле и одно необязательное поле:
public class MyFields
{
decimal req1;
decimal? opt1; // optional field 1
}
Затем определите метод веб-службы для его использования:
[WebMethod]
void MyWSMethod(MyFields myFields)
{/* code here will ultimately call InsertMyFields */}
void InsertMyFields(MyFields myFields)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
// Create the command and set its properties.
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "AddMyFields";
command.CommandType = CommandType.StoredProcedure;
// Add the required input parameter
SqlParameter parameter1 = new SqlParameter();
parameter1.ParameterName = "@ReqField1";
parameter1.SqlDbType = SqlDbType.NVarChar;
parameter1.Direction = ParameterDirection.Input;
parameter1.Value = myFields.req1;
// Add the parameter to the Parameters collection.
command.Parameters.Add(parameter1);
// Add the optional parameter and set its properties.
SqlParameter parameter2 = new SqlParameter();
parameter2.ParameterName = "@OptField1";
parameter2.SqlDbType = SqlDbType.NVarChar;
parameter2.Direction = ParameterDirection.Input;
parameter2.Value = myFields.opt1 ?? DBNull.Value; //null coalescing operator
// Add the parameter to the Parameters collection.
command.Parameters.Add(parameter2);
//.. rest of the code
}
}
Если у типа nullable есть значение, Оператор слияния Null установит значение, иначе он установит другое указанное вами значение (DBNull.Value в нашем случае).