本文整理汇总了C#中ClassInfo.GetAttributeId方法的典型用法代码示例。如果您正苦于以下问题:C# ClassInfo.GetAttributeId方法的具体用法?C# ClassInfo.GetAttributeId怎么用?C# ClassInfo.GetAttributeId使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ClassInfo
的用法示例。
在下文中一共展示了ClassInfo.GetAttributeId方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetClassInfo
/// <summary>
/// Builds a class info from a class and an existing class info
/// The existing class info is used to make sure that fields with the same name will have the same id
/// </summary>
/// <param name="fullClassName"> The name of the class to get info </param>
/// <param name="existingClassInfo"> </param>
/// <returns> A ClassInfo - a meta representation of the class </returns>
private static ClassInfo GetClassInfo(String fullClassName, ClassInfo existingClassInfo)
{
var type = TypeResolutionUtils.ResolveType(fullClassName);
var classInfo = new ClassInfo(type);
var fields = GetAllFieldsFrom(type);
var attributes = new OdbList<ClassAttributeInfo>(fields.Count);
var maxAttributeId = existingClassInfo.MaxAttributeId;
foreach (var fieldInfo in fields)
{
// Gets the attribute id from the existing class info
var attributeId = existingClassInfo.GetAttributeId(fieldInfo.Name);
if (attributeId == - 1)
{
maxAttributeId++;
// The attribute with field.getName() does not exist in existing class info
// create a new id
attributeId = maxAttributeId;
}
var fieldClassInfo = !OdbType.GetFromClass(fieldInfo.FieldType).IsNative()
? new ClassInfo(fieldInfo.FieldType)
: null;
attributes.Add(new ClassAttributeInfo(attributeId, fieldInfo.Name, fieldInfo.FieldType,
OdbClassNameResolver.GetFullName(fieldInfo.FieldType), fieldClassInfo));
}
classInfo.Attributes = attributes;
classInfo.MaxAttributeId = maxAttributeId;
return classInfo;
}
示例2: GetObjectInfoInternal
/// <summary>
/// Build a meta representation of an object
/// <pre>warning: When an object has two fields with the same name
/// (a private field with the same name in a parent class, the deeper field (of the parent) is ignored!)</pre>
/// </summary>
/// <returns> The ObjectInfo </returns>
private AbstractObjectInfo GetObjectInfoInternal(AbstractObjectInfo nnoi, object o, ClassInfo classInfo,
bool recursive,
IDictionary<object, NonNativeObjectInfo> alreadyReadObjects,
IIntrospectionCallback callback)
{
if (o == null)
return NullNativeObjectInfo.GetInstance();
var clazz = o.GetType();
var type = OdbType.GetFromClass(clazz);
if (type.IsNative())
return GetNativeObjectInfoInternal(type, o, recursive, alreadyReadObjects, callback);
// sometimes the type.getName() may not match the ci.getClassName()
// It happens when the attribute is an interface or superclass of the
// real attribute class
// In this case, ci must be updated to the real class info
if (classInfo != null && !classInfo.FullClassName.Equals(OdbClassNameResolver.GetFullName(clazz)))
{
classInfo = GetClassInfo(clazz);
nnoi = null;
}
var mainAoi = (NonNativeObjectInfo) nnoi;
var isRootObject = false;
if (alreadyReadObjects == null)
{
alreadyReadObjects = new OdbHashMap<object, NonNativeObjectInfo>();
isRootObject = true;
}
NonNativeObjectInfo cachedNnoi;
alreadyReadObjects.TryGetValue(o, out cachedNnoi);
if (cachedNnoi != null)
return new ObjectReference(cachedNnoi);
if (callback != null)
callback.ObjectFound(o);
if (mainAoi == null)
mainAoi = BuildNnoi(o, classInfo);
alreadyReadObjects[o] = mainAoi;
var fields = ClassIntrospector.GetAllFieldsFrom(clazz);
foreach (var field in fields)
{
try
{
var value = field.GetValue(o);
var attributeId = classInfo.GetAttributeId(field.Name);
if (attributeId == -1)
{
throw new OdbRuntimeException(
NDatabaseError.ObjectIntrospectorNoFieldWithName.AddParameter(classInfo.FullClassName).
AddParameter(field.Name));
}
var valueType = OdbType.GetFromClass(value == null
? field.FieldType
: value.GetType());
// for native fields
AbstractObjectInfo abstractObjectInfo;
if (valueType.IsNative())
{
abstractObjectInfo = GetNativeObjectInfoInternal(valueType, value, recursive, alreadyReadObjects,
callback);
mainAoi.SetAttributeValue(attributeId, abstractObjectInfo);
}
else
{
// Non Native Objects
if (value == null)
{
var classInfo1 = GetClassInfo(field.GetType());
abstractObjectInfo = new NonNativeNullObjectInfo(classInfo1);
mainAoi.SetAttributeValue(attributeId, abstractObjectInfo);
}
else
{
var classInfo2 = GetClassInfo(value.GetType());
if (recursive)
{
abstractObjectInfo = GetObjectInfoInternal(null, value, classInfo2, true,
alreadyReadObjects, callback);
mainAoi.SetAttributeValue(attributeId, abstractObjectInfo);
}
else
{
// When it is not recursive, simply add the object
//.........这里部分代码省略.........