Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DataRowExtensions.cs
Go to the documentation of this file.
2
3namespace System.Data;
4
5public static class DataRowExtensions
6{
7 private static class UnboxT<T>
8 {
9 internal static readonly Converter<object, T> s_unbox = Create();
10
11 private static Converter<object, T> Create()
12 {
13 if (typeof(T).IsValueType)
14 {
15 if (!typeof(T).IsGenericType || !(typeof(T).GetGenericTypeDefinition() == typeof(Nullable<>)))
16 {
17 return ValueField;
18 }
19 return (Converter<object, T>)Delegate.CreateDelegate(typeof(Converter<object, T>), typeof(UnboxT<T>).GetMethod("NullableField", BindingFlags.Static | BindingFlags.NonPublic).MakeGenericMethod(typeof(T).GetGenericArguments()[0]));
20 }
21 return ReferenceField;
22 }
23
24 private static T ReferenceField(object value)
25 {
26 if (value != DBNull.Value)
27 {
28 return (T)value;
29 }
30 return default(T);
31 }
32
33 private static T ValueField(object value)
34 {
35 if (value != DBNull.Value)
36 {
37 return (T)value;
38 }
40 }
41
42 private static TElem? NullableField<TElem>(object value) where TElem : struct
43 {
44 if (value != DBNull.Value)
45 {
46 return (TElem)value;
47 }
48 return null;
49 }
50 }
51
52 public static T? Field<T>(this DataRow row, string columnName)
53 {
54 DataSetUtil.CheckArgumentNull(row, "row");
55 return UnboxT<T>.s_unbox(row[columnName]);
56 }
57
58 public static T? Field<T>(this DataRow row, DataColumn column)
59 {
60 DataSetUtil.CheckArgumentNull(row, "row");
61 return UnboxT<T>.s_unbox(row[column]);
62 }
63
64 public static T? Field<T>(this DataRow row, int columnIndex)
65 {
66 DataSetUtil.CheckArgumentNull(row, "row");
67 return UnboxT<T>.s_unbox(row[columnIndex]);
68 }
69
70 public static T? Field<T>(this DataRow row, int columnIndex, DataRowVersion version)
71 {
72 DataSetUtil.CheckArgumentNull(row, "row");
73 return UnboxT<T>.s_unbox(row[columnIndex, version]);
74 }
75
76 public static T? Field<T>(this DataRow row, string columnName, DataRowVersion version)
77 {
78 DataSetUtil.CheckArgumentNull(row, "row");
79 return UnboxT<T>.s_unbox(row[columnName, version]);
80 }
81
82 public static T? Field<T>(this DataRow row, DataColumn column, DataRowVersion version)
83 {
84 DataSetUtil.CheckArgumentNull(row, "row");
85 return UnboxT<T>.s_unbox(row[column, version]);
86 }
87
88 public static void SetField<T>(this DataRow row, int columnIndex, T? value)
89 {
90 DataSetUtil.CheckArgumentNull(row, "row");
91 row[columnIndex] = ((object)value) ?? DBNull.Value;
92 }
93
94 public static void SetField<T>(this DataRow row, string columnName, T? value)
95 {
96 DataSetUtil.CheckArgumentNull(row, "row");
97 row[columnName] = ((object)value) ?? DBNull.Value;
98 }
99
100 public static void SetField<T>(this DataRow row, DataColumn column, T? value)
101 {
102 DataSetUtil.CheckArgumentNull(row, "row");
103 row[column] = ((object)value) ?? DBNull.Value;
104 }
105}
static InvalidCastException InvalidCast(string message)
static readonly DBNull Value
Definition DBNull.cs:8
static readonly Converter< object, T > s_unbox
static ? TElem NullableField< TElem >(object value)
static Converter< object, T > Create()
static ? T Field< T >(this DataRow row, string columnName)
static void SetField< T >(this DataRow row, int columnIndex, T? value)
static ? Delegate CreateDelegate(Type type, object target, string method, bool ignoreCase, bool throwOnBindFailure)
Definition Delegate.cs:152
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string DataSetLinq_NonNullableCast
Definition SR.cs:936
Definition SR.cs:7