Turning to @Vadim's answer, here is a version that does not create a new dictionary every time the extension method is called;
namespace SharePoint.Client.Extensions { public static class FieldExtensions { private static Dictionary<FieldType, Type> _fieldTypes = new Dictionary<FieldType, Type>() { { FieldType.Guid, typeof(Guid) }, { FieldType.Attachments, typeof(bool)}, {FieldType.Boolean, typeof(bool)}, {FieldType.Choice, typeof(string)}, {FieldType.CrossProjectLink, typeof(bool)}, {FieldType.DateTime, typeof(DateTime)}, {FieldType.Lookup, typeof(FieldLookupValue)}, {FieldType.ModStat, typeof(int)}, {FieldType.MultiChoice, typeof(string[])}, {FieldType.Number, typeof(double)}, {FieldType.Recurrence, typeof(bool)}, {FieldType.Text, typeof(string)}, {FieldType.URL, typeof(FieldUrlValue)}, {FieldType.User, typeof(FieldUserValue)}, {FieldType.WorkflowStatus, typeof(int)}, {FieldType.ContentTypeId, typeof(ContentTypeId)}, {FieldType.Note, typeof(string)}, {FieldType.Counter, typeof(int)}, {FieldType.Computed, typeof(string)}, {FieldType.Integer, typeof(int)}, {FieldType.File, typeof(string)} }; public static Type GetFieldValueType(this Field field) { if (!_fieldTypes.ContainsKey(field.FieldTypeKind)) throw new NotSupportedException(string.Format("Unknown field type: {0}", field.FieldTypeKind)); return _fieldTypes[field.FieldTypeKind]; } } }